From 309372e1febeaf3fc0c548ea37b8190bc092ad9d Mon Sep 17 00:00:00 2001 From: Ajasra Date: Thu, 29 Oct 2026 13:49:50 +0800 Subject: [PATCH] fix: normalize bilingual style names to strings so /portal dashboard renders --- lib/storage.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/storage.ts b/lib/storage.ts index 42b0ee0..fade29f 100644 --- a/lib/storage.ts +++ b/lib/storage.ts @@ -86,6 +86,24 @@ function queueWrite(task: () => Promise | void): Promise { /** * Load all records from disk safely with automatic backup recovery */ +/** + * Style names became bilingual objects ({ en, zh }); older/newer records may store + * either a plain string or that object. Always expose a plain string to the portal UI. + */ +function toPlainStyleName(name: unknown): string { + if (typeof name === "string") return name; + if (name && typeof name === "object") { + const n = name as { en?: string; zh?: string }; + if (n.en && n.zh) return `${n.en} ยท ${n.zh}`; + return n.en || n.zh || "Unknown Disguise"; + } + return "Unknown Disguise"; +} + +function normalizeRecordStyleName(r: GenerationRecord): GenerationRecord { + return { ...r, styleName: toPlainStyleName(r.styleName) }; +} + export function getAllRecords(): GenerationRecord[] { ensureDirectories(); try { @@ -98,7 +116,7 @@ export function getAllRecords(): GenerationRecord[] { console.warn("[Storage] records.json is not an array, attempting backup recovery..."); return recoverFromBackup(); } - return parsed; + return parsed.map(normalizeRecordStyleName); } catch (err) { console.error("[Storage] JSON parse error in records.json, attempting backup recovery:", err); return recoverFromBackup(); @@ -117,7 +135,7 @@ function recoverFromBackup(): GenerationRecord[] { console.warn("[Storage] Successfully recovered records from records.json.bak!"); // Re-write valid records back to records.json fs.writeFileSync(RECORDS_FILE, backupRaw, "utf8"); - return parsed; + return parsed.map(normalizeRecordStyleName); } } } catch (backupErr) { @@ -302,7 +320,7 @@ export async function logGenerationEvent(data: { timestamp: now.toISOString(), dateStr, styleId: data.styleId, - styleName: data.styleName, + styleName: toPlainStyleName(data.styleName), provider: data.provider, model: data.model, durationMs: data.durationMs,