import { prisma } from "@/lib/prisma"; import { CONTENT_REGISTRY, getContentFieldDef, type ContentFieldDef } from "@/lib/content-registry"; import type { Locale } from "@/i18n/config"; /** * Liefert den aktuell wirksamen Text fuer einen Registry-Schluessel — den * Admin-Override aus SiteContent, falls gepflegt, sonst den urspruenglichen * Dictionary-/site-config-Text. Nie leer/undefined, solange der Schluessel in * der Registry existiert. */ export async function getContentValue(key: string, locale: Locale): Promise { const def = getContentFieldDef(key); if (!def) return ""; const row = await prisma.siteContent.findUnique({ where: { key } }); if (row) { const value = def.localized ? (locale === "de" ? row.valueDe : (row.valueEn ?? row.valueDe)) : row.valueDe; if (value.trim() !== "") return value; } return def.getDefault(locale); } /** Batch-Variante fuer Seiten, die mehrere Schluessel auf einmal brauchen (ein DB-Roundtrip statt vieler). */ export async function getContentValues(keys: string[], locale: Locale): Promise> { const rows = await prisma.siteContent.findMany({ where: { key: { in: keys } } }); const rowsByKey = new Map(rows.map((r) => [r.key, r])); const result: Record = {}; for (const key of keys) { const def = getContentFieldDef(key); if (!def) { result[key] = ""; continue; } const row = rowsByKey.get(key); const overridden = row ? def.localized ? locale === "de" ? row.valueDe : (row.valueEn ?? row.valueDe) : row.valueDe : ""; result[key] = overridden.trim() !== "" ? overridden : def.getDefault(locale); } return result; } export { parseListSimple, parseListTitled, parseListNumbered, parseSections } from "@/lib/content-parsers"; export { CONTENT_REGISTRY }; export type { ContentFieldDef };