import { Prisma } from "@prisma/client"; import { getContentReferenceAPI } from "../../../config/apis/media.reference"; import { ErrorForwarder } from "../../../helpers/error/instances/forwarder"; import { bulkInsertGenresRepository } from "../repositories/bulkInsertGenres.repository"; import { InsertMediaRepository } from "../repositories/bulkinsertMediaa.repository"; import { bulkInsertStudiosRepository } from "../repositories/bulkInsertStudios.repository"; import { MediaFullInfoResponse } from "../types/mediaFullInfo.type"; import { generateSlug } from "../../../helpers/characters/generateSlug"; export const bulkInsertAnimeService = async (malId: number) => { try { const { baseURL, getMediaFullInfo } = getContentReferenceAPI(malId); const mediaFullInfo = (await fetch(baseURL + getMediaFullInfo).then((res) => res.json(), )) as MediaFullInfoResponse; const insertedGenres = await bulkInsertGenresRepository(mediaFullInfo); const insertedStudios = await bulkInsertStudiosRepository(mediaFullInfo); const constructMediaPayload = { title: mediaFullInfo.data.title, titleAlternative: (mediaFullInfo.data .titles as unknown) as Prisma.InputJsonValue, slug: await generateSlug(mediaFullInfo.data.title, { model: "media", target: "slug", }), malId: mediaFullInfo.data.mal_id, genres: { connect: insertedGenres.map((id) => ({ id })), }, studios: { connect: insertedStudios.map((id) => ({ id })), }, score: mediaFullInfo.data.score, pictureMedium: mediaFullInfo.data.images.webp.image_url, pictureLarge: mediaFullInfo.data.images.webp.large_image_url, status: mediaFullInfo.data.status, startAiring: mediaFullInfo.data.aired.from, endAiring: mediaFullInfo.data.aired.to, synopsis: mediaFullInfo.data.synopsis, ageRating: mediaFullInfo.data.rating, mediaType: mediaFullInfo.data.type, source: mediaFullInfo.data.source, onDraft: false, uploadedBy: "b734b9bc-b4ea-408f-a80e-0a837ce884da", }; const insertedMedia = await InsertMediaRepository({ malId: mediaFullInfo.data.mal_id, payload: constructMediaPayload, }); return insertedMedia; } catch (error) { ErrorForwarder(error); } };