diff --git a/api/src/controllers/seed/insert/collection.ts b/api/src/controllers/seed/insert/collection.ts index b93c8b5a..063bcc81 100644 --- a/api/src/controllers/seed/insert/collection.ts +++ b/api/src/controllers/seed/insert/collection.ts @@ -73,9 +73,10 @@ export const insertCollection = async ( }), ); await flushImageQueue(tx, imgQueue, 100); + // we can't unnest values here because show translations contains arrays. await tx .insert(showTranslations) - .select(unnestValues(trans, showTranslations)) + .values(trans) .onConflictDoUpdate({ target: [showTranslations.pk, showTranslations.language], set: conflictUpdateAllExcept(showTranslations, ["pk", "language"]), diff --git a/api/src/controllers/seed/insert/entries.ts b/api/src/controllers/seed/insert/entries.ts index c6dcbc5c..34f8d1f1 100644 --- a/api/src/controllers/seed/insert/entries.ts +++ b/api/src/controllers/seed/insert/entries.ts @@ -161,22 +161,22 @@ export const insertEntries = async ( .select( db .select({ - entryPk: sql`vids.entryPk`.as("entry"), + entryPk: sql`vids."entryPk"`.as("entry"), videoPk: videos.pk, slug: computeVideoSlug( - sql`vids.entrySlug`, - sql`vids.needRendering`, + sql`vids."entrySlug"`, + sql`vids."needRendering"`, ), }) .from( unnest(vids, "vids", { entryPk: "integer", - entrySlug: "string", + entrySlug: "varchar(255)", needRendering: "boolean", videoId: "uuid", }), ) - .innerJoin(videos, eq(videos.id, sql`vids.videoId`)), + .innerJoin(videos, eq(videos.id, sql`vids."videoId"`)), ) .onConflictDoNothing() .returning({ diff --git a/api/src/controllers/seed/insert/shows.ts b/api/src/controllers/seed/insert/shows.ts index 5bb23af6..cf59f9a0 100644 --- a/api/src/controllers/seed/insert/shows.ts +++ b/api/src/controllers/seed/insert/shows.ts @@ -93,9 +93,10 @@ export const insertShow = async ( }), ); await flushImageQueue(tx, imgQueue, 200); + // we can't unnest values here because show translations contains arrays. await tx .insert(showTranslations) - .select(unnestValues(trans, showTranslations)) + .values(trans) .onConflictDoUpdate({ target: [showTranslations.pk, showTranslations.language], set: conflictUpdateAllExcept(showTranslations, ["pk", "language"]), diff --git a/api/src/controllers/seed/insert/studios.ts b/api/src/controllers/seed/insert/studios.ts index c9f8f5dc..f15c4eb8 100644 --- a/api/src/controllers/seed/insert/studios.ts +++ b/api/src/controllers/seed/insert/studios.ts @@ -61,9 +61,9 @@ export const insertStudios = async ( db .select({ showPk: sql`${showPk}`.as("showPk"), - studioPk: sql`v.studioPk`.as("studioPk"), + studioPk: sql`v."studioPk"`.as("studioPk"), }) - .from(sql`unnest(${sqlarr(ret.map((x) => x.pk))}) as v("studioPk")`), + .from(sql`unnest(${sqlarr(ret.map((x) => x.pk))}::integer[]) as v("studioPk")`), ) .onConflictDoNothing(); return ret; diff --git a/api/src/db/utils.ts b/api/src/db/utils.ts index ab31b84c..e36da34a 100644 --- a/api/src/db/utils.ts +++ b/api/src/db/utils.ts @@ -77,7 +77,7 @@ export function conflictUpdateAllExcept< export function sqlarr(array: unknown[]): string { return `{${array .map((item) => - !item || item === "null" + item === "null" || item === null || item === undefined ? "null" : Array.isArray(item) ? sqlarr(item) diff --git a/api/tests/misc/images.test.ts b/api/tests/misc/images.test.ts index acaf6ff6..1a81d224 100644 --- a/api/tests/misc/images.test.ts +++ b/api/tests/misc/images.test.ts @@ -17,11 +17,11 @@ describe("images", () => { }); it("Create a serie download images", async () => { + await db.delete(mqueue); await createSerie(madeInAbyss); const release = await processImages(); // remove notifications to prevent other images to be downloaded (do not curl 20000 images for nothing) release(); - await db.delete(mqueue); const ret = await db.query.shows.findFirst({ where: eq(shows.slug, madeInAbyss.slug), @@ -32,12 +32,17 @@ describe("images", () => { }); it("Download 404 image", async () => { + await db.delete(mqueue); + const url404 = "https://mockhttp.org/status/404"; const [ret, body] = await createMovie({ ...dune, translations: { en: { ...dune.translations.en, - poster: "https://www.google.com/404", + poster: url404, + thumbnail: null, + banner: null, + logo: null, }, }, }); @@ -46,12 +51,11 @@ describe("images", () => { const release = await processImages(); // remove notifications to prevent other images to be downloaded (do not curl 20000 images for nothing) release(); - await db.delete(mqueue); const failed = await db.query.mqueue.findFirst({ where: and( eq(mqueue.kind, "image"), - eq(sql`${mqueue.message}->>'url'`, "https://www.google.com/404"), + eq(sql`${mqueue.message}->>'url'`, url404), ), }); expect(failed!.attempt).toBe(5);