/** * Gemeinsame Logik der Importskripte für die zentral gepflegten Standardtexte. * * Entspricht der Text einer Erklärung dem Standard, wird `null` gespeichert: * Die Erklärung folgt damit dem Standard und ändert sich automatisch mit, wenn * er im Admin angepasst wird. Nur echte Abweichungen bleiben im Datensatz. */ /** Felder, die aus den Standardtexten kommen können. */ const DEFAULTED_FIELDS = [ "responsible", "contactDPO", "dataSubjectsRights", "complaintRight", "withdrawalRight", "objectionRight", "thirdCountryTransfer", "automatedDecision", "provisionObligation", "provisionConsequences", ] /** Bausteine, die im Standard oder in der Erklärung vorhanden sein müssen. */ const REQUIRED_DEFAULTED_FIELDS = [ "responsible", "contactDPO", "dataSubjectsRights", "complaintRight", "withdrawalRight", "objectionRight", "thirdCountryTransfer", "automatedDecision", ] /** Leerer Standarddatensatz – solange im Admin nichts gepflegt wurde. */ const EMPTY_DEFAULTS = Object.fromEntries(DEFAULTED_FIELDS.map((f) => [f, ""])) /** Liest die Standardtexte (id = 1); fehlt der Datensatz, kommen leere zurück. */ async function readDefaults(prisma) { const row = await prisma.policyDefaults.findUnique({ where: { id: 1 } }) if (!row) return { ...EMPTY_DEFAULTS } return Object.fromEntries(DEFAULTED_FIELDS.map((f) => [f, row[f] ?? ""])) } /** * Ersetzt in einem Import-Datensatz jeden Baustein, der dem Standard * entspricht, durch `null`. Gibt zusätzlich die Felder zurück, die abweichen. */ function foldIntoDefaults(data, defaults) { const overrides = [] for (const field of DEFAULTED_FIELDS) { const own = String(data[field] ?? "").trim() if (!own || own === String(defaults[field] ?? "").trim()) { data[field] = null } else { data[field] = own overrides.push(field) } } return overrides } module.exports = { DEFAULTED_FIELDS, REQUIRED_DEFAULTED_FIELDS, EMPTY_DEFAULTS, readDefaults, foldIntoDefaults, }