v5 api: Random sort query parameter cannot be reversed

This commit is contained in:
Arthur Jamet
2025-01-12 10:13:32 +00:00
committed by Zoe Roux
parent 2afccaa813
commit 67ea86a955
2 changed files with 4 additions and 12 deletions
+1 -5
View File
@@ -177,11 +177,7 @@ export const movies = new Elysia({ prefix: "/movies", tags: ["movies"] })
.where(and(filter, keysetPaginate({ table: shows, after, sort })))
.orderBy(
...(sort.random !== undefined
? [
sort.random.desc
? sql`md5(${sort.random.seed} || ${shows.pk}) desc`
: sql`md5(${sort.random.seed} || ${shows.pk})`,
]
? [sql`md5(${sort.random.seed} || ${shows.pk})`]
: []),
...sort.sort.map((x) =>
x.desc ? sql`${shows[x.key]} desc nulls last` : shows[x.key],
+3 -7
View File
@@ -9,7 +9,7 @@ export type Sort<
remmapedKey?: keyof Remap;
desc: boolean;
}[];
random?: { desc: boolean; seed: number };
random?: { seed: number };
};
export type NonEmptyArray<T> = [T, ...T[]];
@@ -33,14 +33,12 @@ export const Sort = <
.Transform(
t.Array(
t.Union([
t.Literal("random"),
t.TemplateLiteral("random:${number}"),
t.UnionEnum([
...values,
...values.map((x: T[number]) => `-${x}` as const),
]),
t.Union([
t.TemplateLiteral("random:${number}"),
t.TemplateLiteral("-random:${number}"),
]),
]),
{
// TODO: support explode: true (allow sort=slug,-createdAt). needs a pr to elysia
@@ -59,14 +57,12 @@ export const Sort = <
if (key == "random") {
random = {
seed: Math.floor(Math.random() * Number.MAX_SAFE_INTEGER),
desc,
};
continue;
} else if (key.startsWith("random:")) {
const strSeed = key.replace("random:", "");
random = {
seed: parseInt(strSeed),
desc,
};
continue;
}