Add original translation support on the /movies/{id} route

This commit is contained in:
Zoe Roux 2025-01-16 23:44:19 +01:00
parent f3f69a0def
commit 7fcaf6490d
2 changed files with 36 additions and 3 deletions

View File

@ -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<boolean>`(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: {

View File

@ -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],
}),
}));