Files
Wabenhain/src/lib/content.ts
T
Nick Szaunig c7927f2883 feat: Wabenhain Honig-Shop Anwendung
Vollstaendige Next.js/Prisma-E-Commerce-Anwendung fuer eine Imkerei:
Shop, Warenkorb, Stripe-Checkout, Kundenkonto mit 2FA, Admin-Bereich
(Produkte, Ernten, Chargen, Bestellungen, Gutscheine, admin-editierbare
Website-Inhalte), i18n (DE/EN), Rate-Limiting/CSP/Audit-Log-Haertung,
PostgreSQL- und MySQL-Unterstuetzung ueber austauschbare Prisma-
Treiber-Adapter, Unit-/Komponenten-/E2E-Tests.
2026-08-17 14:30:28 +02:00

51 lines
1.9 KiB
TypeScript

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<string> {
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<Record<string, string>> {
const rows = await prisma.siteContent.findMany({ where: { key: { in: keys } } });
const rowsByKey = new Map(rows.map((r) => [r.key, r]));
const result: Record<string, string> = {};
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 };