import { listOrphanCandidatesForUser } from "#server/service/media"; type OrphanFilter = "all" | "deletable" | "cooling"; function parseFilter(raw: string | undefined): OrphanFilter { const v = raw === undefined || raw === "" ? "all" : raw; if (v === "all" || v === "deletable" || v === "cooling") { return v; } throw createError({ statusCode: 400, statusMessage: "filter 须为 all、deletable 或 cooling" }); } function parsePositiveInt(raw: string | undefined, fallback: number, label: string): number { if (raw === undefined || raw === "") { return fallback; } const n = Number(raw); if (!Number.isInteger(n) || n < 1) { throw createError({ statusCode: 400, statusMessage: `${label} 须为正整数` }); } return n; } export default defineWrappedResponseHandler(async (event) => { const user = await event.context.auth.requireUser(); const q = getQuery(event); const filter = parseFilter(typeof q.filter === "string" ? q.filter : undefined); const page = parsePositiveInt(typeof q.page === "string" ? q.page : undefined, 1, "page"); const pageSizeRaw = parsePositiveInt( typeof q.pageSize === "string" ? q.pageSize : undefined, 20, "pageSize", ); const pageSize = Math.min(pageSizeRaw, 100); const { items, total } = await listOrphanCandidatesForUser(user.id, filter, page, pageSize); return R.success({ items, total }); });