Enhance ZXDB releases and caching

Signed-off-by: codex@lucy.xalior.com
This commit is contained in:
2026-01-10 17:05:37 +00:00
parent 208a06c351
commit 5d140a45a7
5 changed files with 519 additions and 41 deletions

View File

@@ -1,4 +1,5 @@
import { and, desc, eq, like, sql, asc } from "drizzle-orm";
import { cache } from "react";
// import { alias } from "drizzle-orm/mysql-core";
import { db } from "@/server/db";
import {
@@ -731,15 +732,9 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon
// ----- Lookups lists and category browsing -----
export async function listGenres() {
return db.select().from(genretypes).orderBy(genretypes.name);
}
export async function listLanguages() {
return db.select().from(languages).orderBy(languages.name);
}
export async function listMachinetypes() {
return db.select().from(machinetypes).orderBy(machinetypes.name);
}
export const listGenres = cache(async () => db.select().from(genretypes).orderBy(genretypes.name));
export const listLanguages = cache(async () => db.select().from(languages).orderBy(languages.name));
export const listMachinetypes = cache(async () => db.select().from(machinetypes).orderBy(machinetypes.name));
// Note: ZXDB structure in this project does not include a `releasetypes` table.
// Do not attempt to query it here.
@@ -1546,35 +1541,22 @@ export async function getReleaseDetail(entryId: number, releaseSeq: number): Pro
}
// ----- Download/lookups simple lists -----
export async function listFiletypes() {
return db.select().from(filetypes).orderBy(filetypes.name);
}
export async function listSchemetypes() {
return db.select().from(schemetypes).orderBy(schemetypes.name);
}
export async function listSourcetypes() {
return db.select().from(sourcetypes).orderBy(sourcetypes.name);
}
export async function listCasetypes() {
return db.select().from(casetypes).orderBy(casetypes.name);
}
export const listFiletypes = cache(async () => db.select().from(filetypes).orderBy(filetypes.name));
export const listSchemetypes = cache(async () => db.select().from(schemetypes).orderBy(schemetypes.name));
export const listSourcetypes = cache(async () => db.select().from(sourcetypes).orderBy(sourcetypes.name));
export const listCasetypes = cache(async () => db.select().from(casetypes).orderBy(casetypes.name));
// Newly exposed lookups
export async function listAvailabletypes() {
return db.select().from(availabletypes).orderBy(availabletypes.name);
}
export const listAvailabletypes = cache(async () => db.select().from(availabletypes).orderBy(availabletypes.name));
export async function listCurrencies() {
// Preserve full fields for UI needs
return db
export const listCurrencies = cache(async () =>
db
.select({ id: currencies.id, name: currencies.name, symbol: currencies.symbol, prefix: currencies.prefix })
.from(currencies)
.orderBy(currencies.name);
}
.orderBy(currencies.name)
);
export async function listRoletypes() {
return db.select().from(roletypes).orderBy(roletypes.name);
}
export const listRoletypes = cache(async () => db.select().from(roletypes).orderBy(roletypes.name));
export async function listMagazines(params: { q?: string; page?: number; pageSize?: number }): Promise<PagedResult<MagazineListItem>> {
const q = (params.q ?? "").trim();