Add seed entry capabilities

This commit is contained in:
Zoe Roux 2025-01-26 14:45:40 +01:00
parent 5ca0ef08d4
commit 0939289e2c
No known key found for this signature in database

View File

@ -23,36 +23,20 @@ export const insertEntries = async (
show: { pk: number; slug: string }, show: { pk: number; slug: string },
items: SeedEntry[], items: SeedEntry[],
) => { ) => {
const vals = await Promise.all( const retEntries = await db.transaction(async (tx) => {
items.map(async (seed) => { const vals = items.map((seed) => {
const { translations, videos, ...entry } = seed; const { translations, videos, ...entry } = seed;
return { return {
entry: { ...entry,
...entry, showPk: show.pk,
showPk: show.pk, slug: generateSlug(show.slug, seed),
slug: generateSlug(show.slug, seed), thumbnails: processOptImage(seed.thumbnail),
thumbnails: await processOptImage(seed.thumbnail), nextRefresh: guessNextRefresh(entry.airDate ?? new Date()),
nextRefresh: guessNextRefresh(entry.airDate ?? new Date()),
} satisfies EntryI,
translations: (await Promise.all(
Object.entries(translations).map(async ([lang, tr]) => ({
...tr,
language: lang,
poster:
seed.kind === "movie"
? await processOptImage(tr.poster)
: undefined,
})),
)) satisfies Omit<EntryTrans, "pk">[],
videos,
}; };
}), });
);
return await db.transaction(async (tx) => {
const ret = await tx const ret = await tx
.insert(entries) .insert(entries)
.values(vals.map((x) => x.entry)) .values(vals)
.onConflictDoUpdate({ .onConflictDoUpdate({
target: entries.slug, target: entries.slug,
set: conflictUpdateAllExcept(entries, [ set: conflictUpdateAllExcept(entries, [
@ -63,20 +47,25 @@ export const insertEntries = async (
"createdAt", "createdAt",
]), ]),
}) })
.returning({ pk: entries.pk }); .returning({ pk: entries.pk, id: entries.id, slug: entries.slug });
const trans = items.flatMap((seed, i) =>
Object.entries(seed.translations).map(([lang, tr]) => ({
// assumes ret is ordered like items.
pk: ret[i].pk,
language: lang,
...tr,
})),
);
await tx await tx
.insert(entryTranslations) .insert(entryTranslations)
.values( .values(trans)
vals.map((x, i) =>
x.translations.map((tr) => ({ ...tr, pk: ret[i].pk })),
),
)
.onConflictDoUpdate({ .onConflictDoUpdate({
target: [entryTranslations.pk, entryTranslations.language], target: [entryTranslations.pk, entryTranslations.language],
set: conflictUpdateAllExcept(entryTranslations, ["pk", "language"]), set: conflictUpdateAllExcept(entryTranslations, ["pk", "language"]),
}); });
return { ...ret, entry: entry.pk }; return ret;
}); });
return retEntries;
}; };