🚧 wip: update media bulk insert for new schema
This commit is contained in:
@ -2,6 +2,8 @@ import { Prisma } from "@prisma/client";
|
||||
import { AppError } from "../../../helpers/error/instances/app";
|
||||
import { prisma } from "../../../utils/databases/prisma/connection";
|
||||
import { generateUUIDv7 } from "../../../helpers/databases/uuidv7";
|
||||
import { MediaFullInfoResponse } from "../types/mediaFullInfo.type";
|
||||
import { SystemAccountId } from "../../../config/account/system";
|
||||
|
||||
/**
|
||||
* Media Payload Construction and Upsert
|
||||
@ -17,21 +19,100 @@ import { generateUUIDv7 } from "../../../helpers/databases/uuidv7";
|
||||
* @param data - The full media data for constructing the media payload.
|
||||
* @returns The inserted or updated media record.
|
||||
*/
|
||||
export const InsertMediaRepository = async ({
|
||||
malId,
|
||||
payload,
|
||||
}: {
|
||||
malId: number;
|
||||
payload: Omit<Prisma.MediaUncheckedCreateInput, "id">;
|
||||
}) => {
|
||||
export const InsertMediaRepository = async ({ payload }: { payload: MediaFullInfoResponse["data"] }) => {
|
||||
try {
|
||||
return await prisma.media.upsert({
|
||||
where: { malId },
|
||||
update: payload,
|
||||
create: {
|
||||
id: generateUUIDv7(),
|
||||
...payload,
|
||||
const constructMediaPayload: Prisma.MediaUpsertArgs["create"] = {
|
||||
mal_id: payload.mal_id,
|
||||
title: payload.title,
|
||||
title_secondary: payload.title_english,
|
||||
title_original: payload.title_japanese,
|
||||
title_synonyms: payload.title_synonyms,
|
||||
trailer: {
|
||||
connectOrCreate: {
|
||||
where: {
|
||||
embed_url: payload.trailer.embed_url,
|
||||
},
|
||||
create: {
|
||||
embed_url: payload.trailer.embed_url,
|
||||
url: payload.trailer.url,
|
||||
small_image_url: payload.trailer.images.small_image_url,
|
||||
large_image_url: payload.trailer.images.large_image_url,
|
||||
maximum_image_url: payload.trailer.images.maximum_image_url,
|
||||
},
|
||||
},
|
||||
},
|
||||
synopsis: payload.synopsis,
|
||||
small_image_url: payload.images.jpg.small_image_url,
|
||||
medium_image_url: payload.images.jpg.image_url,
|
||||
large_image_url: payload.images.jpg.large_image_url,
|
||||
type: {
|
||||
connectOrCreate: {
|
||||
where: {
|
||||
name: payload.type.toLowerCase(),
|
||||
},
|
||||
create: {
|
||||
name: payload.type.toLowerCase(),
|
||||
},
|
||||
},
|
||||
},
|
||||
source: {
|
||||
connectOrCreate: {
|
||||
where: {
|
||||
name: payload.source.toLowerCase(),
|
||||
},
|
||||
create: {
|
||||
name: payload.source.toLowerCase(),
|
||||
},
|
||||
},
|
||||
},
|
||||
status: {
|
||||
connectOrCreate: {
|
||||
where: {
|
||||
name: payload.status.toLowerCase(),
|
||||
},
|
||||
create: {
|
||||
name: payload.status.toLowerCase(),
|
||||
},
|
||||
},
|
||||
},
|
||||
airing: payload.airing,
|
||||
start_airing: payload.aired.from,
|
||||
end_airing: payload.aired.to,
|
||||
age_rating: {
|
||||
connectOrCreate: {
|
||||
where: {
|
||||
name: payload.rating.toLowerCase(),
|
||||
},
|
||||
create: {
|
||||
name: payload.rating.toLowerCase(),
|
||||
min_age: 0, // Placeholder, as the actual age rating details may require additional mapping
|
||||
},
|
||||
},
|
||||
},
|
||||
score_total: 0,
|
||||
score_count: 0,
|
||||
background: payload.background,
|
||||
season: payload.season,
|
||||
year: payload.year,
|
||||
country: {
|
||||
connectOrCreate: {
|
||||
where: {
|
||||
code: "jpn",
|
||||
},
|
||||
create: {
|
||||
name: "japan",
|
||||
slug: "japan",
|
||||
code: "jpn",
|
||||
},
|
||||
},
|
||||
},
|
||||
broadcast_day: payload.broadcast.day,
|
||||
};
|
||||
|
||||
return await prisma.media.upsert({
|
||||
where: { mal_id: payload.mal_id },
|
||||
create: constructMediaPayload,
|
||||
update: constructMediaPayload,
|
||||
});
|
||||
} catch (error) {
|
||||
throw new AppError(500, "Failed to insert media", error);
|
||||
|
||||
Reference in New Issue
Block a user