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.
This commit is contained in:
1 parent
5c76fcc266
commit
c7927f2883
240 files changed
+26096
-137
No files matched your search
@@ -0,0 +1,50 @@
|
||||
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 };
|
||||
Reference in new issue
Block a user