diff --git a/api/src/models/utils/sort.ts b/api/src/models/utils/sort.ts index 7a7a1ee5..83e22d39 100644 --- a/api/src/models/utils/sort.ts +++ b/api/src/models/utils/sort.ts @@ -49,36 +49,20 @@ export const Sort = < ), ) .Decode((sort): Sort => { - const sortItems: Sort["sort"] = []; - let random: Sort["random"] = undefined; - for (const x of sort) { - const desc = x[0] === "-"; - const key = (desc ? x.substring(1) : x) as T[number]; - if (key == "random") { - random = { - seed: Math.floor(Math.random() * Number.MAX_SAFE_INTEGER), - }; - continue; - } else if (key.startsWith("random:")) { - const strSeed = key.replace("random:", ""); - random = { - seed: parseInt(strSeed), - }; - continue; - } - - if (key in remap) { - sortItems.push({ key: remap[key]!, remmapedKey: key, desc }); - } else { - sortItems.push({ - key: key as Exclude, - desc, - }); - } + const random = sort.find((x) => x.startsWith("random")); + if (random) { + const seed = random.includes(":") + ? Number.parseInt(random.substring("random:".length)) + : Math.floor(Math.random() * Number.MAX_SAFE_INTEGER); + return { random: { seed }, sort: [] }; } return { - sort: sortItems, - random, + sort: sort.map((x) => { + const desc = x[0] === "-"; + const key = (desc ? x.substring(1) : x) as T[number]; + if (key in remap) return { key: remap[key]!, remmapedKey: key, desc }; + return { key: key as Exclude, desc }; + }), }; }) .Encode(() => {