refactor: create genre module in bulk insert media
This commit is contained in:
@ -0,0 +1,36 @@
|
|||||||
|
import {AppError} from "../../../helpers/error/instances/app";
|
||||||
|
import {MediaFullInfoResponse} from "../types/mediaFullInfo.type";
|
||||||
|
import {prisma} from "../../../utils/databases/prisma/connection";
|
||||||
|
import slugify from "slugify";
|
||||||
|
|
||||||
|
export const bulkInsertMediaGenreRepository = async (mediaData: MediaFullInfoResponse, mediaId: string) => {
|
||||||
|
try {
|
||||||
|
await prisma.$transaction(async (tx) => {
|
||||||
|
const createdGenres = await tx.genre.createManyAndReturn({
|
||||||
|
data: mediaData.data.genres.map((genre) => ({
|
||||||
|
name: genre.name,
|
||||||
|
mal_id: genre.mal_id,
|
||||||
|
slug: slugify(genre.name, {
|
||||||
|
lower: true,
|
||||||
|
strict: true,
|
||||||
|
})
|
||||||
|
})),
|
||||||
|
skipDuplicates: true,
|
||||||
|
select: {
|
||||||
|
mal_id: true,
|
||||||
|
id: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await tx.mediaGenre.createMany({
|
||||||
|
data: createdGenres.map((genre) => ({
|
||||||
|
media_id: mediaId,
|
||||||
|
genre_id: genre.id
|
||||||
|
})),
|
||||||
|
skipDuplicates: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
throw new AppError(500, "Failed to bulk insert media genre", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -4,20 +4,24 @@ import {getContentReferenceAPI} from "../../../../config/apis/jikan/media.refere
|
|||||||
import {bulkInsertMediaCharacterRepository} from "../../repositories/bulkInsertMediaCharacter.repository";
|
import {bulkInsertMediaCharacterRepository} from "../../repositories/bulkInsertMediaCharacter.repository";
|
||||||
import {MediaFullInfoResponse} from "../../types/mediaFullInfo.type";
|
import {MediaFullInfoResponse} from "../../types/mediaFullInfo.type";
|
||||||
import {MediaCharacters} from "../../types/mediaCharacters";
|
import {MediaCharacters} from "../../types/mediaCharacters";
|
||||||
|
import {bulkInsertMediaGenreRepository} from "../../repositories/bulkInsertMediaGenre.repository";
|
||||||
|
|
||||||
export const bulkInsertAnimeService = async (malId: number) => {
|
export const bulkInsertAnimeService = async (malId: number) => {
|
||||||
try {
|
try {
|
||||||
const {baseURL, getMediaFullInfo, getMediaCharacters} = getContentReferenceAPI(malId);
|
const {baseURL, getMediaFullInfo, getMediaCharacters} = getContentReferenceAPI(malId);
|
||||||
const mediaFullInfo = (await fetch(baseURL + getMediaFullInfo).then((res) => res.json())) as MediaFullInfoResponse;
|
const mediaFullInfo = (await fetch(baseURL + getMediaFullInfo).then((res) => res.json())) as MediaFullInfoResponse;
|
||||||
|
|
||||||
|
// Inserting Media and Producers (Producer, Studio, Licensor)
|
||||||
const insertedMedia = await InsertMediaRepository({
|
const insertedMedia = await InsertMediaRepository({
|
||||||
payload: mediaFullInfo.data,
|
payload: mediaFullInfo.data,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Inserting Characters, Staff, and Voice Actors
|
||||||
// await bulkInsertMediaCharacterRepository(insertedMedia.mal_id)
|
|
||||||
const mediaChar = await fetch(baseURL + getMediaCharacters).then((res) => res.json()) as MediaCharacters;
|
const mediaChar = await fetch(baseURL + getMediaCharacters).then((res) => res.json()) as MediaCharacters;
|
||||||
return await bulkInsertMediaCharacterRepository(insertedMedia.id, mediaChar.data);
|
await bulkInsertMediaCharacterRepository(insertedMedia.id, mediaChar.data);
|
||||||
|
|
||||||
|
// Inserting Genres and Demographics
|
||||||
|
await bulkInsertMediaGenreRepository(mediaFullInfo, insertedMedia.id)
|
||||||
|
|
||||||
return insertedMedia.id;
|
return insertedMedia.id;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user