Favor Next machine types in search

Prefer Spectrum Next and +3 results when no machine filter is selected.

Signed-off-by: codex@lucy.xalior.com
This commit is contained in:
2026-01-10 23:44:02 +00:00
parent 48d02adbed
commit 762d13be55
3 changed files with 52 additions and 4 deletions

View File

@@ -177,6 +177,15 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
const offset = (page - 1) * pageSize;
const sort = params.sort ?? (q ? "title" : "id_desc");
const scope: EntrySearchScope = params.scope ?? "title";
const preferMachineOrder = typeof params.machinetypeId === "number"
? null
: sql`case
when ${entries.machinetypeId} = 27 then 0
when ${entries.machinetypeId} = 26 then 1
when ${entries.machinetypeId} = 8 then 2
when ${entries.machinetypeId} = 9 then 3
else 4
end`;
if (q.length === 0) {
// Default listing: return first page by id desc (no guaranteed ordering field; using id)
@@ -213,7 +222,10 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(whereExpr ?? sql`true`)
.orderBy(sort === "id_desc" ? desc(entries.id) : entries.title)
.orderBy(
...(preferMachineOrder ? [preferMachineOrder] : []),
sort === "id_desc" ? desc(entries.id) : entries.title
)
.limit(pageSize)
.offset(offset);
return q1;
@@ -257,7 +269,10 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(sql`${entries.id} in (select entry_id from (${union}) as matches)`)
.groupBy(entries.id)
.orderBy(sort === "id_desc" ? desc(entries.id) : entries.title)
.orderBy(
...(preferMachineOrder ? [preferMachineOrder] : []),
sort === "id_desc" ? desc(entries.id) : entries.title
)
.limit(pageSize)
.offset(offset);
@@ -295,7 +310,10 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(sql`lower(${searchByTitles.entryTitle}) like ${pattern}`)
.groupBy(entries.id)
.orderBy(sort === "id_desc" ? desc(entries.id) : entries.title)
.orderBy(
...(preferMachineOrder ? [preferMachineOrder] : []),
sort === "id_desc" ? desc(entries.id) : entries.title
)
.limit(pageSize)
.offset(offset);
@@ -1736,6 +1754,15 @@ export async function searchReleases(params: ReleaseSearchParams): Promise<Paged
const pageSize = Math.max(1, Math.min(params.pageSize ?? 20, 100));
const page = Math.max(1, params.page ?? 1);
const offset = (page - 1) * pageSize;
const preferMachineOrder = params.dMachinetypeId != null
? null
: sql`case
when ${entries.machinetypeId} = 27 then 0
when ${entries.machinetypeId} = 26 then 1
when ${entries.machinetypeId} = 8 then 2
when ${entries.machinetypeId} = 9 then 3
else 4
end`;
// Build WHERE conditions in Drizzle QB
const wherePartsQB: Array<ReturnType<typeof sql>> = [];
@@ -1814,7 +1841,12 @@ export async function searchReleases(params: ReleaseSearchParams): Promise<Paged
.from(releases)
.leftJoin(entries, eq(entries.id, releases.entryId))
.where(whereExpr ?? sql`true`)
.orderBy(orderBy1!, ...(orderBy2 ? [orderBy2] : []), ...(orderBy3 ? [orderBy3] : []))
.orderBy(
...(preferMachineOrder ? [preferMachineOrder] : []),
orderBy1!,
...(orderBy2 ? [orderBy2] : []),
...(orderBy3 ? [orderBy3] : [])
)
.limit(pageSize)
.offset(offset);