mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Add videos in /shows/:id/entries
This commit is contained in:
parent
a430819d22
commit
0558222150
@ -2,7 +2,13 @@ import type { StaticDecode } from "@sinclair/typebox";
|
|||||||
import { type SQL, and, eq, ne, sql } from "drizzle-orm";
|
import { type SQL, and, eq, ne, sql } from "drizzle-orm";
|
||||||
import { Elysia, t } from "elysia";
|
import { Elysia, t } from "elysia";
|
||||||
import { db } from "~/db";
|
import { db } from "~/db";
|
||||||
import { entries, entryTranslations, shows } from "~/db/schema";
|
import {
|
||||||
|
entries,
|
||||||
|
entryTranslations,
|
||||||
|
entryVideoJoin,
|
||||||
|
shows,
|
||||||
|
videos,
|
||||||
|
} from "~/db/schema";
|
||||||
import { getColumns, sqlarr } from "~/db/utils";
|
import { getColumns, sqlarr } from "~/db/utils";
|
||||||
import {
|
import {
|
||||||
Entry,
|
Entry,
|
||||||
@ -99,6 +105,18 @@ async function getEntries({
|
|||||||
.as("t");
|
.as("t");
|
||||||
const { pk, name, ...transCol } = getColumns(transQ);
|
const { pk, name, ...transCol } = getColumns(transQ);
|
||||||
|
|
||||||
|
const { guess, createdAt, updatedAt, ...videosCol } = getColumns(videos);
|
||||||
|
const videosQ = db
|
||||||
|
.select({ slug: entryVideoJoin.slug, ...videosCol })
|
||||||
|
.from(entryVideoJoin)
|
||||||
|
.where(eq(entryVideoJoin.entryPk, entries.pk))
|
||||||
|
.leftJoin(videos, eq(videos.pk, entryVideoJoin.videoPk))
|
||||||
|
.as("video");
|
||||||
|
const videosJ = db
|
||||||
|
.select({ videos: sql`json_agg("video")`.as("videos") })
|
||||||
|
.from(videosQ)
|
||||||
|
.as("videos_json");
|
||||||
|
|
||||||
const {
|
const {
|
||||||
kind,
|
kind,
|
||||||
externalId,
|
externalId,
|
||||||
@ -112,24 +130,25 @@ async function getEntries({
|
|||||||
.select({
|
.select({
|
||||||
...entryCol,
|
...entryCol,
|
||||||
...transCol,
|
...transCol,
|
||||||
|
videos: sql`${videosJ.videos}`.as("videos"),
|
||||||
// specials don't have an `episodeNumber` but a `number` field.
|
// specials don't have an `episodeNumber` but a `number` field.
|
||||||
number: sql<number>`${episodeNumber}`.as("order"),
|
number: sql<number>`${episodeNumber}`.as("number"),
|
||||||
|
|
||||||
// merge `extraKind` into `kind`
|
// merge `extraKind` into `kind`
|
||||||
kind: sql<EntryKind>`case when ${kind} = 'extra' then ${extraKind} else ${kind}::text end`.as(
|
kind: sql<EntryKind>`case when ${kind} = 'extra' then ${extraKind} else ${kind}::text end`.as(
|
||||||
"kind",
|
"kind",
|
||||||
),
|
),
|
||||||
isExtra: sql<boolean>`${kind} = 'extra'`.as("isExtra"),
|
|
||||||
|
|
||||||
// assign more restrained types to make typescript happy.
|
// assign more restrained types to make typescript happy.
|
||||||
externalId: sql<any>`${externalId}`.as("externalId"),
|
externalId: sql<any>`${externalId}`.as("externalId"),
|
||||||
order: sql<number>`${order}`.as("order"),
|
order: sql<number>`${order}`.as("order"),
|
||||||
seasonNumber: sql<number>`${seasonNumber}`.as("order"),
|
seasonNumber: sql<number>`${seasonNumber}`.as("seasonNumber"),
|
||||||
episodeNumber: sql<number>`${episodeNumber}`.as("order"),
|
episodeNumber: sql<number>`${episodeNumber}`.as("episodeNumber"),
|
||||||
name: sql<string>`${name}`.as("name"),
|
name: sql<string>`${name}`.as("name"),
|
||||||
})
|
})
|
||||||
.from(entries)
|
.from(entries)
|
||||||
.innerJoin(transQ, eq(entries.pk, transQ.pk))
|
.innerJoin(transQ, eq(entries.pk, transQ.pk))
|
||||||
|
.leftJoin(videosJ, sql`true`)
|
||||||
.where(
|
.where(
|
||||||
and(
|
and(
|
||||||
filter,
|
filter,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user