diff --git a/api/src/controllers/movies.ts b/api/src/controllers/movies.ts index 9e814f70..c393b581 100644 --- a/api/src/controllers/movies.ts +++ b/api/src/controllers/movies.ts @@ -69,12 +69,29 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] }) columns: { pk: false, }, - where: eq(showTranslations.language, sql`any(${sqlarr(langs)})`), + where: !langs.includes("*") + ? eq(showTranslations.language, sql`any(${sqlarr(langs)})`) + : undefined, orderBy: [ sql`array_position(${sqlarr(langs)}, ${showTranslations.language})`, ], limit: 1, }, + originalTranslation: { + columns: { + poster: true, + thumbnail: true, + banner: true, + logo: true, + }, + extras: { + // TODO: also fallback on user settings (that's why i made a select here) + preferOriginal: + sql`(select coalesce(${preferOriginal ?? null}::boolean, false))`.as( + "preferOriginal", + ), + }, + }, }, }); @@ -92,7 +109,13 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] }) }); } set.headers["content-language"] = translation.language; - return { ...ret, ...translation }; + return { + ...ret, + ...translation, + ...(ret.originalTranslation?.preferOriginal + ? ret.originalTranslation + : {}), + }; }, { detail: { diff --git a/api/src/db/schema/shows.ts b/api/src/db/schema/shows.ts index 2f43e736..4ea29f6e 100644 --- a/api/src/db/schema/shows.ts +++ b/api/src/db/schema/shows.ts @@ -109,8 +109,13 @@ export const showTranslations = schema.table( (t) => [primaryKey({ columns: [t.pk, t.language] })], ); -export const showsRelations = relations(shows, ({ many }) => ({ +export const showsRelations = relations(shows, ({ many, one }) => ({ translations: many(showTranslations, { relationName: "showTranslations" }), + originalTranslation: one(showTranslations, { + relationName: "originalTranslation", + fields: [shows.pk, shows.originalLanguage], + references: [showTranslations.pk, showTranslations.language], + }), })); export const showsTrRelations = relations(showTranslations, ({ one }) => ({ show: one(shows, { @@ -118,4 +123,9 @@ export const showsTrRelations = relations(showTranslations, ({ one }) => ({ fields: [showTranslations.pk], references: [shows.pk], }), + originalTranslation: one(shows, { + relationName: "originalTranslation", + fields: [showTranslations.pk, showTranslations.language], + references: [shows.pk, shows.originalLanguage], + }), }));