From a04d1ffdf1d118879e097fd7c1c836ed49548e4c Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Sun, 28 Jun 2026 21:00:00 +0700 Subject: [PATCH] refactor: bulk insert media module --- ...lkInsertMediaProducerStudioLicensor.repository.ts | 10 ++++++++-- .../repositories/bulkinsertMedia.repository.ts | 6 ++++-- .../services/http/bulkInsertAnime.service.ts | 12 +++++------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/modules/internal/repositories/bulkInsertMediaProducerStudioLicensor.repository.ts b/src/modules/internal/repositories/bulkInsertMediaProducerStudioLicensor.repository.ts index 5951343..5068978 100644 --- a/src/modules/internal/repositories/bulkInsertMediaProducerStudioLicensor.repository.ts +++ b/src/modules/internal/repositories/bulkInsertMediaProducerStudioLicensor.repository.ts @@ -1,8 +1,14 @@ import { Prisma } from "@prisma/client"; -import { GenreOrProducer, MediaFullInfoResponse } from "../types/mediaFullInfo.type"; +import { GenreOrProducer } from "../types/mediaFullInfo.type"; import { SystemAccountId } from "../../../config/account/system"; -import { status } from "elysia"; + +/** + * Bulk Insert Producer, Studio, Licensor + * + * This function handles the bulk insertion of producers, studios, and licensors. + * It takes a transaction client, the ID of the media, and an array of producer, studio, and licensor objects. + * */ export const bulkInsertMediaProducerStudioLicensorRepository = async ( tx: Prisma.TransactionClient, media_id: string, diff --git a/src/modules/internal/repositories/bulkinsertMedia.repository.ts b/src/modules/internal/repositories/bulkinsertMedia.repository.ts index 29701c7..21b8e83 100644 --- a/src/modules/internal/repositories/bulkinsertMedia.repository.ts +++ b/src/modules/internal/repositories/bulkinsertMedia.repository.ts @@ -1,7 +1,7 @@ import { Prisma } from "@prisma/client"; import { AppError } from "../../../helpers/error/instances/app"; -import { prisma } from "../../../utils/databases/prisma/connection"; import { MediaFullInfoResponse } from "../types/mediaFullInfo.type"; +import { prisma } from "../../../utils/databases/prisma/connection"; import { bulkInsertMediaProducerStudioLicensorRepository } from "./bulkInsertMediaProducerStudioLicensor.repository"; /** @@ -132,7 +132,7 @@ export const InsertMediaRepository = async ({ payload }: { payload: MediaFullInf })), ]; - await prisma.$transaction(async (tx) => { + return await prisma.$transaction(async (tx) => { const media = await tx.media.upsert({ where: { mal_id: payload.mal_id }, create: constructMediaPayload, @@ -143,7 +143,9 @@ export const InsertMediaRepository = async ({ payload }: { payload: MediaFullInf }); await bulkInsertMediaProducerStudioLicensorRepository(tx, media.id, producerPayload); + return media.id; }); + } catch (error) { throw new AppError(500, "Failed to insert media", error); } diff --git a/src/modules/internal/services/http/bulkInsertAnime.service.ts b/src/modules/internal/services/http/bulkInsertAnime.service.ts index cf986a1..b841346 100644 --- a/src/modules/internal/services/http/bulkInsertAnime.service.ts +++ b/src/modules/internal/services/http/bulkInsertAnime.service.ts @@ -1,18 +1,16 @@ -import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder"; -import { InsertMediaRepository } from "../../repositories/bulkinsertMedia.repository"; -import { MediaFullInfoResponse } from "../../types/mediaFullInfo.type"; -import { getContentReferenceAPI } from "../../../../config/apis/jikan/media.reference"; +import {ErrorForwarder} from "../../../../helpers/error/instances/forwarder"; +import {InsertMediaRepository} from "../../repositories/bulkinsertMedia.repository"; +import {getContentReferenceAPI} from "../../../../config/apis/jikan/media.reference"; +import {MediaFullInfoResponse} from "../../types/mediaFullInfo.type"; 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 insertedMedia = await InsertMediaRepository({ + return await InsertMediaRepository({ payload: mediaFullInfo.data, }); - - return insertedMedia; } catch (error) { ErrorForwarder(error); }