mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-03 13:44:33 -04:00
Fix typing & extra handling when fetching entries from db
This commit is contained in:
parent
c70e11d36a
commit
a5483b4ca1
@ -6,6 +6,7 @@ import { entries, entryTranslations, shows } from "~/db/schema";
|
|||||||
import { getColumns, sqlarr } from "~/db/utils";
|
import { getColumns, sqlarr } from "~/db/utils";
|
||||||
import {
|
import {
|
||||||
Entry,
|
Entry,
|
||||||
|
EntryKind,
|
||||||
Episode,
|
Episode,
|
||||||
Extra,
|
Extra,
|
||||||
ExtraType,
|
ExtraType,
|
||||||
@ -82,7 +83,7 @@ async function getEntries(
|
|||||||
filter: SQL | undefined;
|
filter: SQL | undefined;
|
||||||
languages: string[];
|
languages: string[];
|
||||||
},
|
},
|
||||||
) {
|
): Promise<(Entry | Extra | UnknownEntry)[]> {
|
||||||
const show = db.$with("serie").as(
|
const show = db.$with("serie").as(
|
||||||
db
|
db
|
||||||
.select({ pk: shows.pk })
|
.select({ pk: shows.pk })
|
||||||
@ -104,13 +105,27 @@ async function getEntries(
|
|||||||
sql`array_position(${sqlarr(languages)}, ${entryTranslations.language})`,
|
sql`array_position(${sqlarr(languages)}, ${entryTranslations.language})`,
|
||||||
)
|
)
|
||||||
.as("t");
|
.as("t");
|
||||||
const { pk, ...transCol } = getColumns(transQ);
|
const { pk, name, ...transCol } = getColumns(transQ);
|
||||||
|
|
||||||
|
const { kind, externalId, order, seasonNumber, episodeNumber, extraKind, ...entryCol } = getColumns(entries);
|
||||||
return await db
|
return await db
|
||||||
.with(show)
|
.with(show)
|
||||||
.select({
|
.select({
|
||||||
...getColumns(entries),
|
...entryCol,
|
||||||
...transCol,
|
...transCol,
|
||||||
|
// specials don't have an `episodeNumber` but a `number` field.
|
||||||
|
number: sql<number>`${episodeNumber}`.as("order"),
|
||||||
|
|
||||||
|
// merge `extraKind` into `kind`
|
||||||
|
kind: sql<EntryKind>`case when ${kind} = 'extra' then ${extraKind} else ${kind} end`.as("kind"),
|
||||||
|
isExtra: sql<boolean>`${kind} = "extra"`.as("isExtra"),
|
||||||
|
|
||||||
|
// assign more restrained types to make typescript happy.
|
||||||
|
externalId: sql<any>`${externalId}`.as("externalId"),
|
||||||
|
order: sql<number>`${order}`.as("order"),
|
||||||
|
seasonNumber: sql<number>`${seasonNumber}`.as("order"),
|
||||||
|
episodeNumber: sql<number>`${episodeNumber}`.as("order"),
|
||||||
|
name: sql<string>`${name}`.as("name"),
|
||||||
})
|
})
|
||||||
.from(entries)
|
.from(entries)
|
||||||
.innerJoin(transQ, eq(entries.pk, transQ.pk))
|
.innerJoin(transQ, eq(entries.pk, transQ.pk))
|
||||||
@ -164,7 +179,8 @@ export const entriesH = new Elysia()
|
|||||||
filter,
|
filter,
|
||||||
),
|
),
|
||||||
languages: langs,
|
languages: langs,
|
||||||
});
|
}) as Entry[];
|
||||||
|
|
||||||
return createPage(items, { url, sort, limit });
|
return createPage(items, { url, sort, limit });
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
import { t } from "elysia";
|
import { t } from "elysia";
|
||||||
import {
|
import { Extra } from "./extra";
|
||||||
Episode,
|
import { UnknownEntry } from "./unknown-entry";
|
||||||
MovieEntry,
|
import { Episode, SeedEpisode } from "./episode";
|
||||||
SeedEpisode,
|
import { MovieEntry, SeedMovieEntry } from "./movie-entry";
|
||||||
SeedMovieEntry,
|
import { SeedSpecial, Special } from "./special";
|
||||||
SeedSpecial,
|
|
||||||
Special,
|
|
||||||
} from "../entry";
|
|
||||||
|
|
||||||
export const Entry = t.Union([Episode, MovieEntry, Special]);
|
export const Entry = t.Union([Episode, MovieEntry, Special]);
|
||||||
export type Entry = Episode | MovieEntry | Special;
|
export type Entry = Episode | MovieEntry | Special;
|
||||||
@ -14,6 +11,8 @@ export type Entry = Episode | MovieEntry | Special;
|
|||||||
export const SeedEntry = t.Union([SeedEpisode, SeedMovieEntry, SeedSpecial]);
|
export const SeedEntry = t.Union([SeedEpisode, SeedMovieEntry, SeedSpecial]);
|
||||||
export type SeedEntry = SeedEpisode | SeedMovieEntry | SeedSpecial;
|
export type SeedEntry = SeedEpisode | SeedMovieEntry | SeedSpecial;
|
||||||
|
|
||||||
|
export type EntryKind = Entry["kind"] | Extra["kind"] | UnknownEntry["kind"];
|
||||||
|
|
||||||
export * from "./episode";
|
export * from "./episode";
|
||||||
export * from "./movie-entry";
|
export * from "./movie-entry";
|
||||||
export * from "./special";
|
export * from "./special";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user