mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-01 12:44:45 -04:00
Stupid implementation of search, lots to fix
This commit is contained in:
parent
23dc0a2f88
commit
a51de86c95
@ -249,7 +249,7 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
|||||||
.get(
|
.get(
|
||||||
"",
|
"",
|
||||||
async ({
|
async ({
|
||||||
query: { limit, after, sort, filter, preferOriginal },
|
query: { limit, after, query, sort, filter, preferOriginal },
|
||||||
headers: { "accept-language": languages },
|
headers: { "accept-language": languages },
|
||||||
request: { url },
|
request: { url },
|
||||||
}) => {
|
}) => {
|
||||||
@ -295,8 +295,15 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
|||||||
isAvailable: sql<boolean>`${videoQ.showPk} is not null`.as(
|
isAvailable: sql<boolean>`${videoQ.showPk} is not null`.as(
|
||||||
"isAvailable",
|
"isAvailable",
|
||||||
),
|
),
|
||||||
|
rank: sql<number>`ts_rank_cd(${transQ.search}, query)`.as("rank"),
|
||||||
})
|
})
|
||||||
.from(shows)
|
.from(shows)
|
||||||
|
// TODO: change `simple` to `transQ.language`
|
||||||
|
// yes drizzle doesn't support crossJoin so we do a fullJoin on true T-T
|
||||||
|
.fullJoin(
|
||||||
|
sql`websearch_to_tsquery('simple', ${query}) as query`,
|
||||||
|
sql`true`,
|
||||||
|
)
|
||||||
.innerJoin(transQ, eq(shows.pk, transQ.pk))
|
.innerJoin(transQ, eq(shows.pk, transQ.pk))
|
||||||
.leftJoin(
|
.leftJoin(
|
||||||
showTranslations,
|
showTranslations,
|
||||||
@ -308,8 +315,15 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
.leftJoin(videoQ, eq(shows.pk, videoQ.showPk))
|
.leftJoin(videoQ, eq(shows.pk, videoQ.showPk))
|
||||||
.where(and(filter, keysetPaginate({ table: shows, after, sort })))
|
.where(
|
||||||
|
and(
|
||||||
|
filter,
|
||||||
|
query ? sql`query @@ ${transQ.search}` : undefined,
|
||||||
|
keysetPaginate({ table: shows, after, sort }),
|
||||||
|
),
|
||||||
|
)
|
||||||
.orderBy(
|
.orderBy(
|
||||||
|
...(query ? [sql`rank`] : []),
|
||||||
...(sort.random
|
...(sort.random
|
||||||
? [sql`md5(${sort.random.seed} || ${shows.pk})`]
|
? [sql`md5(${sort.random.seed} || ${shows.pk})`]
|
||||||
: []),
|
: []),
|
||||||
@ -331,6 +345,14 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
|
|||||||
description: "How to sort the query",
|
description: "How to sort the query",
|
||||||
}),
|
}),
|
||||||
filter: t.Optional(Filter({ def: movieFilters })),
|
filter: t.Optional(Filter({ def: movieFilters })),
|
||||||
|
query: t.Optional(
|
||||||
|
t.String({
|
||||||
|
description: comment`
|
||||||
|
Search query.
|
||||||
|
Searching automatically sort via relevance before the other sort parameters.
|
||||||
|
`,
|
||||||
|
}),
|
||||||
|
),
|
||||||
limit: t.Integer({
|
limit: t.Integer({
|
||||||
minimum: 1,
|
minimum: 1,
|
||||||
maximum: 250,
|
maximum: 250,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user