mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-31 14:33:50 -04:00
Add helper function for entries' translations
This commit is contained in:
parent
616c7140d3
commit
8c8a974054
@ -141,6 +141,17 @@ export const entryVideosQ = db
|
|||||||
.leftJoin(videos, eq(videos.pk, entryVideoJoin.videoPk))
|
.leftJoin(videos, eq(videos.pk, entryVideoJoin.videoPk))
|
||||||
.as("videos");
|
.as("videos");
|
||||||
|
|
||||||
|
export const getEntryTransQ = (languages: string[]) => {
|
||||||
|
return db
|
||||||
|
.selectDistinctOn([entryTranslations.pk])
|
||||||
|
.from(entryTranslations)
|
||||||
|
.orderBy(
|
||||||
|
entryTranslations.pk,
|
||||||
|
sql`array_position(${sqlarr(languages)}, ${entryTranslations.language})`,
|
||||||
|
)
|
||||||
|
.as("entry_t");
|
||||||
|
};
|
||||||
|
|
||||||
export const mapProgress = ({ aliased }: { aliased: boolean }) => {
|
export const mapProgress = ({ aliased }: { aliased: boolean }) => {
|
||||||
const { time, percent, playedDate, videoId } = getColumns(entryProgressQ);
|
const { time, percent, playedDate, videoId } = getColumns(entryProgressQ);
|
||||||
const ret = {
|
const ret = {
|
||||||
@ -174,15 +185,7 @@ export async function getEntries({
|
|||||||
userId: string;
|
userId: string;
|
||||||
progressQ?: typeof entryProgressQ;
|
progressQ?: typeof entryProgressQ;
|
||||||
}): Promise<(Entry | Extra)[]> {
|
}): Promise<(Entry | Extra)[]> {
|
||||||
const transQ = db
|
const transQ = getEntryTransQ(languages);
|
||||||
.selectDistinctOn([entryTranslations.pk])
|
|
||||||
.from(entryTranslations)
|
|
||||||
.orderBy(
|
|
||||||
entryTranslations.pk,
|
|
||||||
sql`array_position(${sqlarr(languages)}, ${entryTranslations.language})`,
|
|
||||||
)
|
|
||||||
.as("t");
|
|
||||||
const { pk, name, ...transCol } = getColumns(transQ);
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
kind,
|
kind,
|
||||||
@ -196,7 +199,7 @@ export async function getEntries({
|
|||||||
return await db
|
return await db
|
||||||
.select({
|
.select({
|
||||||
...entryCol,
|
...entryCol,
|
||||||
...transCol,
|
...getColumns(transQ),
|
||||||
videos: entryVideosQ.videos,
|
videos: entryVideosQ.videos,
|
||||||
progress: mapProgress({ aliased: true }),
|
progress: mapProgress({ aliased: true }),
|
||||||
// specials don't have an `episodeNumber` but a `number` field.
|
// specials don't have an `episodeNumber` but a `number` field.
|
||||||
@ -212,7 +215,7 @@ export async function getEntries({
|
|||||||
order: sql<number>`${order}`,
|
order: sql<number>`${order}`,
|
||||||
seasonNumber: sql<number>`${seasonNumber}`,
|
seasonNumber: sql<number>`${seasonNumber}`,
|
||||||
episodeNumber: sql<number>`${episodeNumber}`,
|
episodeNumber: sql<number>`${episodeNumber}`,
|
||||||
name: sql<string>`${name}`,
|
name: sql<string>`${transQ.name}`,
|
||||||
})
|
})
|
||||||
.from(entries)
|
.from(entries)
|
||||||
.innerJoin(transQ, eq(entries.pk, transQ.pk))
|
.innerJoin(transQ, eq(entries.pk, transQ.pk))
|
||||||
|
@ -22,6 +22,7 @@ import {
|
|||||||
entryFilters,
|
entryFilters,
|
||||||
entryProgressQ,
|
entryProgressQ,
|
||||||
entryVideosQ,
|
entryVideosQ,
|
||||||
|
getEntryTransQ,
|
||||||
mapProgress,
|
mapProgress,
|
||||||
} from "../entries";
|
} from "../entries";
|
||||||
|
|
||||||
@ -73,16 +74,7 @@ export const nextup = new Elysia({ tags: ["profiles"] })
|
|||||||
jwt: { sub },
|
jwt: { sub },
|
||||||
}) => {
|
}) => {
|
||||||
const langs = processLanguages(languages);
|
const langs = processLanguages(languages);
|
||||||
|
const transQ = getEntryTransQ(langs);
|
||||||
const transQ = db
|
|
||||||
.selectDistinctOn([entryTranslations.pk])
|
|
||||||
.from(entryTranslations)
|
|
||||||
.orderBy(
|
|
||||||
entryTranslations.pk,
|
|
||||||
sql`array_position(${sqlarr(langs)}, ${entryTranslations.language})`,
|
|
||||||
)
|
|
||||||
.as("t");
|
|
||||||
const { pk, name, ...transCol } = getColumns(transQ);
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
externalId,
|
externalId,
|
||||||
@ -97,7 +89,7 @@ export const nextup = new Elysia({ tags: ["profiles"] })
|
|||||||
const items = await db
|
const items = await db
|
||||||
.select({
|
.select({
|
||||||
...entryCol,
|
...entryCol,
|
||||||
...transCol,
|
...getColumns(transQ),
|
||||||
videos: entryVideosQ.videos,
|
videos: entryVideosQ.videos,
|
||||||
progress: mapProgress({ aliased: true }),
|
progress: mapProgress({ aliased: true }),
|
||||||
// specials don't have an `episodeNumber` but a `number` field.
|
// specials don't have an `episodeNumber` but a `number` field.
|
||||||
|
@ -36,7 +36,7 @@ import {
|
|||||||
} from "~/models/utils";
|
} from "~/models/utils";
|
||||||
import type { EmbeddedVideo } from "~/models/video";
|
import type { EmbeddedVideo } from "~/models/video";
|
||||||
import { WatchlistStatus } from "~/models/watchlist";
|
import { WatchlistStatus } from "~/models/watchlist";
|
||||||
import { entryProgressQ, entryVideosQ, mapProgress } from "../entries";
|
import { entryProgressQ, entryVideosQ, getEntryTransQ, mapProgress } from "../entries";
|
||||||
|
|
||||||
export const watchStatusQ = db
|
export const watchStatusQ = db
|
||||||
.select({
|
.select({
|
||||||
@ -147,7 +147,7 @@ const showRelations = {
|
|||||||
).as("json"),
|
).as("json"),
|
||||||
})
|
})
|
||||||
.from(studios)
|
.from(studios)
|
||||||
.leftJoin(studioTransQ, eq(studios.pk, studioTransQ.pk))
|
.innerJoin(studioTransQ, eq(studios.pk, studioTransQ.pk))
|
||||||
.where(
|
.where(
|
||||||
exists(
|
exists(
|
||||||
db
|
db
|
||||||
@ -185,21 +185,13 @@ const showRelations = {
|
|||||||
.as("videos");
|
.as("videos");
|
||||||
},
|
},
|
||||||
firstEntry: ({ languages }: { languages: string[] }) => {
|
firstEntry: ({ languages }: { languages: string[] }) => {
|
||||||
const transQ = db
|
const transQ = getEntryTransQ(languages);
|
||||||
.selectDistinctOn([entryTranslations.pk])
|
|
||||||
.from(entryTranslations)
|
|
||||||
.orderBy(
|
|
||||||
entryTranslations.pk,
|
|
||||||
sql`array_position(${sqlarr(languages)}, ${entryTranslations.language})`,
|
|
||||||
)
|
|
||||||
.as("t");
|
|
||||||
const { pk, ...transCol } = getColumns(transQ);
|
|
||||||
|
|
||||||
return db
|
return db
|
||||||
.select({
|
.select({
|
||||||
firstEntry: jsonbBuildObject<Entry>({
|
firstEntry: jsonbBuildObject<Entry>({
|
||||||
...getColumns(entries),
|
...getColumns(entries),
|
||||||
...transCol,
|
...getColumns(transQ),
|
||||||
number: entries.episodeNumber,
|
number: entries.episodeNumber,
|
||||||
videos: entryVideosQ.videos,
|
videos: entryVideosQ.videos,
|
||||||
progress: mapProgress({ aliased: false }),
|
progress: mapProgress({ aliased: false }),
|
||||||
@ -217,21 +209,13 @@ const showRelations = {
|
|||||||
.as("firstEntry");
|
.as("firstEntry");
|
||||||
},
|
},
|
||||||
nextEntry: ({ languages }: { languages: string[] }) => {
|
nextEntry: ({ languages }: { languages: string[] }) => {
|
||||||
const transQ = db
|
const transQ = getEntryTransQ(languages);
|
||||||
.selectDistinctOn([entryTranslations.pk])
|
|
||||||
.from(entryTranslations)
|
|
||||||
.orderBy(
|
|
||||||
entryTranslations.pk,
|
|
||||||
sql`array_position(${sqlarr(languages)}, ${entryTranslations.language})`,
|
|
||||||
)
|
|
||||||
.as("t");
|
|
||||||
const { pk, ...transCol } = getColumns(transQ);
|
|
||||||
|
|
||||||
return db
|
return db
|
||||||
.select({
|
.select({
|
||||||
nextEntry: jsonbBuildObject<Entry>({
|
nextEntry: jsonbBuildObject<Entry>({
|
||||||
...getColumns(entries),
|
...getColumns(entries),
|
||||||
...transCol,
|
...getColumns(transQ),
|
||||||
number: entries.episodeNumber,
|
number: entries.episodeNumber,
|
||||||
videos: entryVideosQ.videos,
|
videos: entryVideosQ.videos,
|
||||||
progress: mapProgress({ aliased: false }),
|
progress: mapProgress({ aliased: false }),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user