import type { PrismaClient, PrivacyPolicy as StoredPolicy } from '@prisma/client' import { DEFAULTED_FIELDS, EMPTY_POLICY_DEFAULTS, REQUIRED_DEFAULTED_FIELDS, applyPolicyDefaults, } from '@/lib/policy-defaults' import { PolicyDefaults, PrivacyPolicy } from '@/types/privacy-policy' /** * Liest den einzigen Standarddatensatz (id = 1). Existiert er noch nicht – * etwa direkt nach der Migration in einer leeren Datenbank – kommen leere * Texte zurück, statt dass der Aufruf scheitert. */ export async function readPolicyDefaults( prisma: PrismaClient ): Promise { const row = await prisma.policyDefaults.findUnique({ where: { id: 1 } }) if (!row) return EMPTY_POLICY_DEFAULTS return { ...(Object.fromEntries( DEFAULTED_FIELDS.map((field) => [field, row[field] ?? '']) ) as Omit), updatedAt: row.updatedAt.toISOString(), } } /** * Bringt einen gespeicherten Datensatz in die Form, die API und Seiten * verwenden: Standardtexte eingesetzt, Zeitstempel als ISO-Zeichenketten. * * Ein Pflicht-Baustein, für den weder die Erklärung noch der Standard einen * Text hat, wird zur leeren Zeichenkette – der zugehörige Abschnitt entfällt * dann in der Anzeige, statt „null“ auszugeben. */ export function toApiPolicy( policy: StoredPolicy, defaults: PolicyDefaults ): PrivacyPolicy { const merged = applyPolicyDefaults(policy, defaults) return { ...merged, ...(Object.fromEntries( REQUIRED_DEFAULTED_FIELDS.map((field) => [field, merged[field] ?? '']) ) as Pick), createdAt: policy.createdAt.toISOString(), updatedAt: policy.updatedAt.toISOString(), } }