mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-31 20:24:27 -04:00
Use sql builder instead of orm for /movie
This commit is contained in:
parent
16fb638231
commit
cca0da4bf6
@ -62,6 +62,7 @@ export async function getShows({
|
|||||||
sort,
|
sort,
|
||||||
filter,
|
filter,
|
||||||
languages,
|
languages,
|
||||||
|
fallbackLanguage = true,
|
||||||
preferOriginal = false,
|
preferOriginal = false,
|
||||||
}: {
|
}: {
|
||||||
after: string | undefined;
|
after: string | undefined;
|
||||||
@ -70,11 +71,17 @@ export async function getShows({
|
|||||||
sort: StaticDecode<typeof showSort>;
|
sort: StaticDecode<typeof showSort>;
|
||||||
filter: SQL | undefined;
|
filter: SQL | undefined;
|
||||||
languages: string[];
|
languages: string[];
|
||||||
|
fallbackLanguage?: boolean;
|
||||||
preferOriginal?: boolean;
|
preferOriginal?: boolean;
|
||||||
}) {
|
}) {
|
||||||
const transQ = db
|
const transQ = db
|
||||||
.selectDistinctOn([showTranslations.pk])
|
.selectDistinctOn([showTranslations.pk])
|
||||||
.from(showTranslations)
|
.from(showTranslations)
|
||||||
|
.where(
|
||||||
|
!fallbackLanguage
|
||||||
|
? eq(showTranslations.language, sql`any(${sqlarr(languages)})`)
|
||||||
|
: undefined,
|
||||||
|
)
|
||||||
.orderBy(
|
.orderBy(
|
||||||
showTranslations.pk,
|
showTranslations.pk,
|
||||||
sql`array_position(${sqlarr(languages)}, ${showTranslations.language})`,
|
sql`array_position(${sqlarr(languages)}, ${showTranslations.language})`,
|
||||||
@ -86,6 +93,8 @@ export async function getShows({
|
|||||||
.select({
|
.select({
|
||||||
...getColumns(shows),
|
...getColumns(shows),
|
||||||
...transCol,
|
...transCol,
|
||||||
|
lanugage: transQ.language,
|
||||||
|
|
||||||
// movie columns (status is only a typescript hint)
|
// movie columns (status is only a typescript hint)
|
||||||
status: sql<MovieStatus>`${shows.status}`,
|
status: sql<MovieStatus>`${shows.status}`,
|
||||||
airDate: shows.startAir,
|
airDate: shows.startAir,
|
||||||
@ -93,14 +102,17 @@ export async function getShows({
|
|||||||
isAvailable: sql<boolean>`${shows.availableCount} != 0`,
|
isAvailable: sql<boolean>`${shows.availableCount} != 0`,
|
||||||
|
|
||||||
...(preferOriginal && {
|
...(preferOriginal && {
|
||||||
poster: sql<Image>`coalesce(${shows.original}->'poster', ${showTranslations.poster})`,
|
poster: sql<Image>`coalesce(${shows.original}->'poster', ${transQ.poster})`,
|
||||||
thumbnail: sql<Image>`coalesce(${shows.original}->'thumbnail', ${showTranslations.thumbnail})`,
|
thumbnail: sql<Image>`coalesce(${shows.original}->'thumbnail', ${transQ.thumbnail})`,
|
||||||
banner: sql<Image>`coalesce(${shows.original}->'banner', ${showTranslations.banner})`,
|
banner: sql<Image>`coalesce(${shows.original}->'banner', ${transQ.banner})`,
|
||||||
logo: sql<Image>`coalesce(${shows.original}->'logo', ${showTranslations.logo})`,
|
logo: sql<Image>`coalesce(${shows.original}->'logo', ${transQ.logo})`,
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
.from(shows)
|
.from(shows)
|
||||||
.innerJoin(transQ, eq(shows.pk, transQ.pk))
|
[fallbackLanguage ? "leftJoin" : "innerJoin"](
|
||||||
|
transQ,
|
||||||
|
eq(shows.pk, transQ.pk),
|
||||||
|
)
|
||||||
.where(
|
.where(
|
||||||
and(
|
and(
|
||||||
filter,
|
filter,
|
||||||
|
@ -10,10 +10,11 @@ import {
|
|||||||
Filter,
|
Filter,
|
||||||
Page,
|
Page,
|
||||||
createPage,
|
createPage,
|
||||||
|
isUuid,
|
||||||
processLanguages,
|
processLanguages,
|
||||||
} from "~/models/utils";
|
} from "~/models/utils";
|
||||||
import { desc } from "~/models/utils/descriptions";
|
import { desc } from "~/models/utils/descriptions";
|
||||||
import { getShow, getShows, showFilters, showSort } from "./logic";
|
import { getShows, showFilters, showSort } from "./logic";
|
||||||
|
|
||||||
export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
||||||
.model({
|
.model({
|
||||||
@ -30,11 +31,15 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
|||||||
set,
|
set,
|
||||||
}) => {
|
}) => {
|
||||||
const langs = processLanguages(languages);
|
const langs = processLanguages(languages);
|
||||||
const ret = await getShow(id, {
|
const [ret] = await getShows({
|
||||||
|
filter: and(
|
||||||
|
isUuid(id) ? eq(shows.id, id) : eq(shows.slug, id),
|
||||||
|
eq(shows.kind, "movie"),
|
||||||
|
),
|
||||||
languages: langs,
|
languages: langs,
|
||||||
|
fallbackLanguage: langs.includes("*"),
|
||||||
preferOriginal,
|
preferOriginal,
|
||||||
relations,
|
relations,
|
||||||
filters: eq(shows.kind, "movie"),
|
|
||||||
});
|
});
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
return error(404, {
|
return error(404, {
|
||||||
@ -49,7 +54,7 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
set.headers["content-language"] = ret.language;
|
set.headers["content-language"] = ret.language;
|
||||||
return ret.show;
|
return ret;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
detail: {
|
detail: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user