mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-31 20:24:27 -04:00
Define collection type
This commit is contained in:
parent
43465834c3
commit
01183df4e9
@ -1,5 +1,6 @@
|
|||||||
import { type SQL, and, eq, exists, sql } from "drizzle-orm";
|
import { type SQL, and, eq, exists, sql } from "drizzle-orm";
|
||||||
import { Elysia, t } from "elysia";
|
import { Elysia, t } from "elysia";
|
||||||
|
import { db } from "~/db";
|
||||||
import { entries, entryVideoJoin, showTranslations, shows } from "~/db/schema";
|
import { entries, entryVideoJoin, showTranslations, shows } from "~/db/schema";
|
||||||
import { getColumns, sqlarr } from "~/db/utils";
|
import { getColumns, sqlarr } from "~/db/utils";
|
||||||
import { KError } from "~/models/error";
|
import { KError } from "~/models/error";
|
||||||
@ -25,7 +26,6 @@ import {
|
|||||||
sortToSql,
|
sortToSql,
|
||||||
} from "~/models/utils";
|
} from "~/models/utils";
|
||||||
import { desc } from "~/models/utils/descriptions";
|
import { desc } from "~/models/utils/descriptions";
|
||||||
import { db } from "../db";
|
|
||||||
|
|
||||||
const movieFilters: FilterDef = {
|
const movieFilters: FilterDef = {
|
||||||
genres: {
|
genres: {
|
||||||
|
76
api/src/models/collections.ts
Normal file
76
api/src/models/collections.ts
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
import { t } from "elysia";
|
||||||
|
import type { Prettify } from "elysia/dist/types";
|
||||||
|
import {
|
||||||
|
ExternalId,
|
||||||
|
Genre,
|
||||||
|
Image,
|
||||||
|
Resource,
|
||||||
|
SeedImage,
|
||||||
|
TranslationRecord,
|
||||||
|
} from "./utils";
|
||||||
|
|
||||||
|
const BaseCollection = t.Object({
|
||||||
|
genres: t.Array(Genre),
|
||||||
|
rating: t.Nullable(t.Integer({ minimum: 0, maximum: 100 })),
|
||||||
|
startAir: t.Nullable(
|
||||||
|
t.String({
|
||||||
|
format: "date",
|
||||||
|
descrpition: "Date of the first item of the collection",
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
endAir: t.Nullable(
|
||||||
|
t.String({
|
||||||
|
format: "date",
|
||||||
|
descrpition: "Date of the last item of the collection",
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
|
||||||
|
createdAt: t.String({ format: "date-time" }),
|
||||||
|
nextRefresh: t.String({ format: "date-time" }),
|
||||||
|
|
||||||
|
externalId: ExternalId,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const CollectionTranslation = t.Object({
|
||||||
|
name: t.String(),
|
||||||
|
description: t.Nullable(t.String()),
|
||||||
|
tagline: t.Nullable(t.String()),
|
||||||
|
aliases: t.Array(t.String()),
|
||||||
|
tags: t.Array(t.String()),
|
||||||
|
|
||||||
|
poster: t.Nullable(Image),
|
||||||
|
thumbnail: t.Nullable(Image),
|
||||||
|
banner: t.Nullable(Image),
|
||||||
|
logo: t.Nullable(Image),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const Collection = t.Intersect([
|
||||||
|
Resource(),
|
||||||
|
CollectionTranslation,
|
||||||
|
BaseCollection,
|
||||||
|
]);
|
||||||
|
export type Collection = Prettify<typeof Collection.static>;
|
||||||
|
|
||||||
|
export const SeedCollection = t.Intersect([
|
||||||
|
t.Omit(BaseCollection, ["createdAt", "nextRefresh"]),
|
||||||
|
t.Object({
|
||||||
|
slug: t.String({ format: "slug" }),
|
||||||
|
translations: TranslationRecord(
|
||||||
|
t.Intersect([
|
||||||
|
t.Omit(CollectionTranslation, [
|
||||||
|
"poster",
|
||||||
|
"thumbnail",
|
||||||
|
"banner",
|
||||||
|
"logo",
|
||||||
|
]),
|
||||||
|
t.Object({
|
||||||
|
poster: t.Nullable(SeedImage),
|
||||||
|
thumbnail: t.Nullable(SeedImage),
|
||||||
|
banner: t.Nullable(SeedImage),
|
||||||
|
logo: t.Nullable(SeedImage),
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
export type SeedCollection = Prettify<typeof SeedCollection.static>;
|
@ -12,6 +12,7 @@ import {
|
|||||||
TranslationRecord,
|
TranslationRecord,
|
||||||
} from "./utils";
|
} from "./utils";
|
||||||
import { Video } from "./video";
|
import { Video } from "./video";
|
||||||
|
import { SeedCollection } from "./collections";
|
||||||
|
|
||||||
export const MovieStatus = t.UnionEnum(["unknown", "finished", "planned"]);
|
export const MovieStatus = t.UnionEnum(["unknown", "finished", "planned"]);
|
||||||
export type MovieStatus = typeof MovieStatus.static;
|
export type MovieStatus = typeof MovieStatus.static;
|
||||||
@ -85,6 +86,7 @@ export const SeedMovie = t.Intersect([
|
|||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
videos: t.Optional(t.Array(t.String({ format: "uuid" }))),
|
videos: t.Optional(t.Array(t.String({ format: "uuid" }))),
|
||||||
|
collection: t.Optional(SeedCollection),
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
export type SeedMovie = Prettify<typeof SeedMovie.static>;
|
export type SeedMovie = Prettify<typeof SeedMovie.static>;
|
||||||
|
@ -7,6 +7,8 @@ import { Genre } from "./utils/genres";
|
|||||||
import { Image, SeedImage } from "./utils/image";
|
import { Image, SeedImage } from "./utils/image";
|
||||||
import { Language, TranslationRecord } from "./utils/language";
|
import { Language, TranslationRecord } from "./utils/language";
|
||||||
import { Resource } from "./utils/resource";
|
import { Resource } from "./utils/resource";
|
||||||
|
import { Prettify } from "~/utils";
|
||||||
|
import { SeedCollection } from "./collections";
|
||||||
|
|
||||||
export const SerieStatus = t.UnionEnum([
|
export const SerieStatus = t.UnionEnum([
|
||||||
"unknown",
|
"unknown",
|
||||||
@ -57,7 +59,7 @@ export const SerieTranslation = t.Object({
|
|||||||
export type SerieTranslation = typeof SerieTranslation.static;
|
export type SerieTranslation = typeof SerieTranslation.static;
|
||||||
|
|
||||||
export const Serie = t.Intersect([Resource(), SerieTranslation, BaseSerie]);
|
export const Serie = t.Intersect([Resource(), SerieTranslation, BaseSerie]);
|
||||||
export type Serie = typeof Serie.static;
|
export type Serie = Prettify<typeof Serie.static>;
|
||||||
|
|
||||||
export const SeedSerie = t.Intersect([
|
export const SeedSerie = t.Intersect([
|
||||||
t.Omit(BaseSerie, ["createdAt", "nextRefresh"]),
|
t.Omit(BaseSerie, ["createdAt", "nextRefresh"]),
|
||||||
@ -77,6 +79,7 @@ export const SeedSerie = t.Intersect([
|
|||||||
seasons: t.Array(SeedSeason),
|
seasons: t.Array(SeedSeason),
|
||||||
entries: t.Array(SeedEntry),
|
entries: t.Array(SeedEntry),
|
||||||
extras: t.Optional(t.Array(SeedExtra)),
|
extras: t.Optional(t.Array(SeedExtra)),
|
||||||
|
collection: t.Optional(SeedCollection),
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
export type SeedSerie = typeof SeedSerie.static;
|
export type SeedSerie = typeof SeedSerie.static;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user