mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-31 20:24:27 -04:00
Add seed entry capabilities
This commit is contained in:
parent
5ca0ef08d4
commit
0939289e2c
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user