refactor: bulk insert media module

This commit is contained in:
2026-06-28 21:00:00 +07:00
parent dcfa4350d6
commit a04d1ffdf1
3 changed files with 17 additions and 11 deletions

View File

@ -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,

View File

@ -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);
}

View File

@ -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);
}