mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Add studio insert method
This commit is contained in:
parent
1cc26c5985
commit
710675180c
55
api/src/controllers/seed/insert/studios.ts
Normal file
55
api/src/controllers/seed/insert/studios.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import { db } from "~/db";
|
||||||
|
import { showStudioJoin, studioTranslations, studios } from "~/db/schema";
|
||||||
|
import { conflictUpdateAllExcept } from "~/db/utils";
|
||||||
|
import type { SeedStudio } from "~/models/studio";
|
||||||
|
import { processOptImage } from "../images";
|
||||||
|
|
||||||
|
type StudioI = typeof studios.$inferInsert;
|
||||||
|
type StudioTransI = typeof studioTranslations.$inferInsert;
|
||||||
|
|
||||||
|
export const insertStudios = async (seed: SeedStudio[], showPk: number) => {
|
||||||
|
if (!seed.length) return [];
|
||||||
|
|
||||||
|
return await db.transaction(async (tx) => {
|
||||||
|
const vals: StudioI[] = seed.map((x) => {
|
||||||
|
const { translations, ...item } = x;
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
|
||||||
|
const ret = await tx
|
||||||
|
.insert(studios)
|
||||||
|
.values(vals)
|
||||||
|
.onConflictDoUpdate({
|
||||||
|
target: studios.slug,
|
||||||
|
set: conflictUpdateAllExcept(studios, [
|
||||||
|
"pk",
|
||||||
|
"id",
|
||||||
|
"slug",
|
||||||
|
"createdAt",
|
||||||
|
]),
|
||||||
|
})
|
||||||
|
.returning({ pk: studios.pk, id: studios.id, slug: studios.slug });
|
||||||
|
|
||||||
|
const trans: StudioTransI[] = seed.flatMap((x, i) =>
|
||||||
|
Object.entries(x.translations).map(([lang, tr]) => ({
|
||||||
|
pk: ret[i].pk,
|
||||||
|
language: lang,
|
||||||
|
name: tr.name,
|
||||||
|
logo: processOptImage(tr.logo),
|
||||||
|
})),
|
||||||
|
);
|
||||||
|
await tx
|
||||||
|
.insert(studioTranslations)
|
||||||
|
.values(trans)
|
||||||
|
.onConflictDoUpdate({
|
||||||
|
target: [studioTranslations.pk, studioTranslations.language],
|
||||||
|
set: conflictUpdateAllExcept(studioTranslations, ["pk", "language"]),
|
||||||
|
});
|
||||||
|
|
||||||
|
await tx
|
||||||
|
.insert(showStudioJoin)
|
||||||
|
.values(ret.map((studio) => ({ show: showPk, studio: studio.pk })))
|
||||||
|
.onConflictDoNothing();
|
||||||
|
return ret;
|
||||||
|
});
|
||||||
|
};
|
@ -5,6 +5,7 @@ import { insertCollection } from "./insert/collection";
|
|||||||
import { insertEntries } from "./insert/entries";
|
import { insertEntries } from "./insert/entries";
|
||||||
import { insertShow } from "./insert/shows";
|
import { insertShow } from "./insert/shows";
|
||||||
import { guessNextRefresh } from "./refresh";
|
import { guessNextRefresh } from "./refresh";
|
||||||
|
import { insertStudios } from "./insert/studios";
|
||||||
|
|
||||||
export const SeedMovieResponse = t.Object({
|
export const SeedMovieResponse = t.Object({
|
||||||
id: t.String({ format: "uuid" }),
|
id: t.String({ format: "uuid" }),
|
||||||
@ -18,6 +19,12 @@ export const SeedMovieResponse = t.Object({
|
|||||||
slug: t.String({ format: "slug", examples: ["sawano-collection"] }),
|
slug: t.String({ format: "slug", examples: ["sawano-collection"] }),
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
studios: t.Array(
|
||||||
|
t.Object({
|
||||||
|
id: t.String({ format: "uuid" }),
|
||||||
|
slug: t.String({ format: "slug", examples: ["disney"] }),
|
||||||
|
}),
|
||||||
|
),
|
||||||
});
|
});
|
||||||
export type SeedMovieResponse = typeof SeedMovieResponse.static;
|
export type SeedMovieResponse = typeof SeedMovieResponse.static;
|
||||||
|
|
||||||
@ -38,7 +45,7 @@ export const seedMovie = async (
|
|||||||
seed.slug = `random-${getYear(seed.airDate)}`;
|
seed.slug = `random-${getYear(seed.airDate)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { translations, videos, collection, ...bMovie } = seed;
|
const { translations, videos, collection, studios, ...bMovie } = seed;
|
||||||
const nextRefresh = guessNextRefresh(bMovie.airDate ?? new Date());
|
const nextRefresh = guessNextRefresh(bMovie.airDate ?? new Date());
|
||||||
|
|
||||||
const col = await insertCollection(collection, {
|
const col = await insertCollection(collection, {
|
||||||
@ -74,11 +81,14 @@ export const seedMovie = async (
|
|||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const retStudios = await insertStudios(studios, show.pk);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
updated: show.updated,
|
updated: show.updated,
|
||||||
id: show.id,
|
id: show.id,
|
||||||
slug: show.slug,
|
slug: show.slug,
|
||||||
videos: entry.videos,
|
videos: entry.videos,
|
||||||
collection: col,
|
collection: col,
|
||||||
|
studios: retStudios,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -5,6 +5,7 @@ import { insertCollection } from "./insert/collection";
|
|||||||
import { insertEntries } from "./insert/entries";
|
import { insertEntries } from "./insert/entries";
|
||||||
import { insertSeasons } from "./insert/seasons";
|
import { insertSeasons } from "./insert/seasons";
|
||||||
import { insertShow } from "./insert/shows";
|
import { insertShow } from "./insert/shows";
|
||||||
|
import { insertStudios } from "./insert/studios";
|
||||||
import { guessNextRefresh } from "./refresh";
|
import { guessNextRefresh } from "./refresh";
|
||||||
|
|
||||||
export const SeedSerieResponse = t.Object({
|
export const SeedSerieResponse = t.Object({
|
||||||
@ -45,6 +46,12 @@ export const SeedSerieResponse = t.Object({
|
|||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
studios: t.Array(
|
||||||
|
t.Object({
|
||||||
|
id: t.String({ format: "uuid" }),
|
||||||
|
slug: t.String({ format: "slug", examples: ["mappa"] }),
|
||||||
|
}),
|
||||||
|
),
|
||||||
});
|
});
|
||||||
export type SeedSerieResponse = typeof SeedSerieResponse.static;
|
export type SeedSerieResponse = typeof SeedSerieResponse.static;
|
||||||
|
|
||||||
@ -65,7 +72,15 @@ export const seedSerie = async (
|
|||||||
seed.slug = `random-${getYear(seed.startAir)}`;
|
seed.slug = `random-${getYear(seed.startAir)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { translations, seasons, entries, extras, collection, ...serie } = seed;
|
const {
|
||||||
|
translations,
|
||||||
|
seasons,
|
||||||
|
entries,
|
||||||
|
extras,
|
||||||
|
collection,
|
||||||
|
studios,
|
||||||
|
...serie
|
||||||
|
} = seed;
|
||||||
const nextRefresh = guessNextRefresh(serie.startAir ?? new Date());
|
const nextRefresh = guessNextRefresh(serie.startAir ?? new Date());
|
||||||
|
|
||||||
const col = await insertCollection(collection, {
|
const col = await insertCollection(collection, {
|
||||||
@ -92,6 +107,8 @@ export const seedSerie = async (
|
|||||||
(extras ?? []).map((x) => ({ ...x, kind: "extra", extraKind: x.kind })),
|
(extras ?? []).map((x) => ({ ...x, kind: "extra", extraKind: x.kind })),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const retStudios = await insertStudios(studios, show.pk);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
updated: show.updated,
|
updated: show.updated,
|
||||||
id: show.id,
|
id: show.id,
|
||||||
@ -100,5 +117,6 @@ export const seedSerie = async (
|
|||||||
entries: retEntries,
|
entries: retEntries,
|
||||||
extras: retExtras,
|
extras: retExtras,
|
||||||
collection: col,
|
collection: col,
|
||||||
|
studios: retStudios,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -25,7 +25,7 @@ export const studios = schema.table("studios", {
|
|||||||
.$onUpdate(() => sql`now()`),
|
.$onUpdate(() => sql`now()`),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const studio_translations = schema.table(
|
export const studioTranslations = schema.table(
|
||||||
"studio_translations",
|
"studio_translations",
|
||||||
{
|
{
|
||||||
pk: integer()
|
pk: integer()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user