Restore missing catalog admin API routes so Visual Manager works.
Local Build and Deploy / deploy (push) Successful in 1m10s

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-17 20:57:55 +02:00
1 parent ce8c3503e9
commit 11d3cf31cc
6 files changed
+490 -10

No files matched your search

+47
View File
@@ -0,0 +1,47 @@
import { promises as fs } from "node:fs";
import path from "node:path";
import { withAdmin } from "@/lib/api-handler";
import { apiOk } from "@/lib/api-response";
import { PERMS } from "@/lib/permissions";
const CATALOGUE_DIR = path.join(
/*turbopackIgnore: true*/ process.cwd(),
"public",
"swf",
"c_images",
"catalogue",
);
export const GET = withAdmin(
{ permission: PERMS.CATALOG_VIEW },
async (request) => {
const sp = request.nextUrl.searchParams;
const limit = Math.min(
Math.max(Number(sp.get("limit") || 120) || 120, 1),
500,
);
const offset = Math.max(Number(sp.get("offset") || 0) || 0, 0);
const search = (sp.get("search") || "").trim().toLowerCase();
let icons: number[] = [];
try {
const files = await fs.readdir(CATALOGUE_DIR);
icons = files
.map((f) => /^icon_(\d+)\.(?:png|gif)$/i.exec(f))
.filter((m): m is RegExpExecArray => Boolean(m))
.map((m) => Number(m[1]))
.filter((n) => Number.isFinite(n))
.sort((a, b) => a - b);
} catch {
icons = [];
}
if (search) {
icons = icons.filter((id) => String(id).includes(search));
}
const total = icons.length;
const slice = icons.slice(offset, offset + limit);
return apiOk({ icons: slice, total });
},
);