Fix build errors

This commit is contained in:
2025-12-17 20:22:00 +00:00
parent 89001f53da
commit 07478b280c
10 changed files with 44 additions and 50 deletions

View File

@@ -1,5 +1,5 @@
import { and, desc, eq, like, sql, asc } from "drizzle-orm";
import { alias } from "drizzle-orm/mysql-core";
// import { alias } from "drizzle-orm/mysql-core";
import { db } from "@/server/db";
import {
entries,
@@ -88,7 +88,7 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
const [items, countRows] = await Promise.all([
(async () => {
let q1 = db
const q1 = db
.select({
id: entries.id,
title: entries.title,
@@ -100,12 +100,12 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
})
.from(entries)
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId));
if (whereExpr) q1 = q1.where(whereExpr);
return q1
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(whereExpr ?? sql`true`)
.orderBy(sort === "id_desc" ? desc(entries.id) : entries.title)
.limit(pageSize)
.offset(offset);
return q1;
})(),
db
.select({ total: sql<number>`count(*)` })
@@ -373,9 +373,10 @@ export async function getEntryById(id: number): Promise<EntryDetail | null> {
const downloadsBySeq = new Map<number, DownloadRow[]>();
for (const row of downloadRows) {
const arr = downloadsBySeq.get(row.releaseSeq) ?? [];
const key = Number(row.releaseSeq);
const arr = downloadsBySeq.get(key) ?? [];
arr.push(row);
downloadsBySeq.set(row.releaseSeq, arr);
downloadsBySeq.set(key, arr);
}
// Build a map of downloads grouped by release_seq
@@ -386,22 +387,22 @@ export async function getEntryById(id: number): Promise<EntryDetail | null> {
type: { id: null, name: null },
language: { id: null, name: null },
machinetype: { id: null, name: null },
year: (r.year) ?? null,
year: r.year != null ? Number(r.year) : null,
comments: null,
downloads: (downloadsBySeq.get(Number(r.releaseSeq)) ?? []).map((d) => ({
id: d.id,
id: Number(d.id),
link: d.link,
size: d.size ?? null,
size: d.size != null ? Number(d.size) : null,
md5: d.md5 ?? null,
comments: d.comments ?? null,
isDemo: !!d.isDemo,
type: { id: d.filetypeId, name: d.filetypeName },
type: { id: Number(d.filetypeId), name: d.filetypeName },
language: { id: (d.dlLangId) ?? null, name: (d.dlLangName) ?? null },
machinetype: { id: (d.dlMachineId) ?? null, name: (d.dlMachineName) ?? null },
machinetype: { id: d.dlMachineId != null ? Number(d.dlMachineId) : null, name: (d.dlMachineName) ?? null },
scheme: { id: (d.schemeId) ?? null, name: (d.schemeName) ?? null },
source: { id: (d.sourceId) ?? null, name: (d.sourceName) ?? null },
case: { id: (d.caseId) ?? null, name: (d.caseName) ?? null },
year: (d.year) ?? null,
year: d.year != null ? Number(d.year) : null,
})),
}));
@@ -437,19 +438,19 @@ export async function getEntryById(id: number): Promise<EntryDetail | null> {
: [],
releases: releasesData,
downloadsFlat: downloadFlatRows.map((d) => ({
id: d.id,
id: Number(d.id),
link: d.link,
size: d.size ?? null,
size: d.size != null ? Number(d.size) : null,
md5: d.md5 ?? null,
comments: d.comments ?? null,
isDemo: !!d.isDemo,
type: { id: d.filetypeId, name: d.filetypeName },
type: { id: Number(d.filetypeId), name: d.filetypeName },
language: { id: (d.dlLangId) ?? null, name: (d.dlLangName) ?? null },
machinetype: { id: (d.dlMachineId) ?? null, name: (d.dlMachineName) ?? null },
machinetype: { id: d.dlMachineId != null ? Number(d.dlMachineId) : null, name: (d.dlMachineName) ?? null },
scheme: { id: (d.schemeId) ?? null, name: (d.schemeName) ?? null },
source: { id: (d.sourceId) ?? null, name: (d.sourceName) ?? null },
case: { id: (d.caseId) ?? null, name: (d.caseName) ?? null },
year: (d.year) ?? null,
year: d.year != null ? Number(d.year) : null,
releaseSeq: Number(d.releaseSeq),
})),
};
@@ -457,7 +458,7 @@ export async function getEntryById(id: number): Promise<EntryDetail | null> {
// ----- Labels -----
export interface LabelDetail extends LabelSummary {}
export type LabelDetail = LabelSummary;
export interface LabelSearchParams {
q?: string;
@@ -482,20 +483,18 @@ export async function searchLabels(params: LabelSearchParams): Promise<PagedResu
return { items: items, page, pageSize, total };
}
// Using helper search_by_names for efficiency
// Using helper search_by_names for efficiency via subselect to avoid raw identifier typing
const pattern = `%${q}%`;
const countRows = await db
.select({ total: sql<number>`count(distinct ${sql.identifier("label_id")})` })
.from(sql`search_by_names`)
.where(like(sql.identifier("label_name"), pattern));
.select({ total: sql<number>`count(*)` })
.from(labels)
.where(sql`${labels.id} in (select distinct label_id from search_by_names where label_name like ${pattern})`);
const total = Number(countRows[0]?.total ?? 0);
const items = await db
.select({ id: labels.id, name: labels.name, labeltypeId: labels.labeltypeId })
.from(sql`search_by_names`)
.innerJoin(labels, eq(labels.id, sql.identifier("label_id")))
.where(like(sql.identifier("label_name"), pattern))
.groupBy(labels.id)
.from(labels)
.where(sql`${labels.id} in (select distinct label_id from search_by_names where label_name like ${pattern})`)
.orderBy(labels.name)
.limit(pageSize)
.offset(offset);