feat(sprint-6): Phase 2 — DSGVO consent management
Deploy to Production / test (push) Has been cancelled
Deploy to Production / deploy (push) Has been cancelled

- V6 migration: consents table with audit columns
- Consent entity, repository, service (grant/revoke/check)
- ConsentController: GET/POST/DELETE consent endpoints
- DSGVO export (Art. 15): full personal data JSON download
- DSGVO deletion (Art. 17): anonymization + account deactivation
- Frontend: consent banner (modal, cannot dismiss), privacy settings page
- React Query hooks for consent + DSGVO operations
- Full i18n (de/en) for consent and DSGVO namespaces
This commit is contained in:
Patrick Plate
2026-06-12 22:22:48 +02:00
parent b38902a7ee
commit 3232d2f7fd
17 changed files with 2227 additions and 0 deletions
+27
View File
@@ -343,5 +343,32 @@
"notFound": "Ressource nicht gefunden.",
"quotaExceeded": "Kontingent überschritten.",
"serverError": "Serverfehler. Bitte versuche es später erneut."
},
"consent": {
"title": "Datenschutz-Einwilligung",
"dataProcessing": "Datenverarbeitung",
"dataProcessingDesc": "Ich willige ein, dass meine personenbezogenen Daten (Name, E-Mail, Geburtsdatum, Ausgabe-Historie) zum Zweck der Vereinsverwaltung verarbeitet werden. Rechtsgrundlage: Art. 6 Abs. 1 lit. a DSGVO.",
"marketing": "Marketing-Benachrichtigungen",
"marketingDesc": "Ich möchte über neue Funktionen und Angebote informiert werden.",
"accept": "Ich stimme zu",
"reject": "Ablehnen und Konto löschen",
"required": "Erforderlich",
"revoke": "Einwilligung widerrufen",
"revokeWarning": "Ohne Einwilligung zur Datenverarbeitung kann der Dienst nicht genutzt werden.",
"granted": "Erteilt am",
"revoked": "Widerrufen"
},
"dsgvo": {
"title": "Datenschutz",
"export": "Meine Daten exportieren",
"exportDesc": "Laden Sie alle über Sie gespeicherten Daten als JSON-Datei herunter (Art. 15 DSGVO).",
"exportButton": "Daten herunterladen",
"exporting": "Daten werden zusammengestellt...",
"exported": "Datenexport heruntergeladen.",
"delete": "Konto und Daten löschen",
"deleteDesc": "Alle personenbezogenen Daten werden unwiderruflich gelöscht oder anonymisiert (Art. 17 DSGVO). Ausgabe-Daten bleiben anonymisiert erhalten (gesetzliche Aufbewahrungspflicht).",
"deleteButton": "Konto endgültig löschen",
"deleteConfirm": "Bist du sicher? Diese Aktion kann nicht rückgängig gemacht werden.",
"deleteSuccess": "Dein Konto wurde gelöscht. Du wirst jetzt abgemeldet."
}
}
+27
View File
@@ -343,5 +343,32 @@
"notFound": "Resource not found.",
"quotaExceeded": "Quota exceeded.",
"serverError": "Server error. Please try again later."
},
"consent": {
"title": "Privacy Consent",
"dataProcessing": "Data Processing",
"dataProcessingDesc": "I consent to the processing of my personal data (name, email, date of birth, distribution history) for the purpose of club management. Legal basis: Art. 6(1)(a) GDPR.",
"marketing": "Marketing Notifications",
"marketingDesc": "I would like to receive information about new features and offers.",
"accept": "I agree",
"reject": "Decline and delete account",
"required": "Required",
"revoke": "Revoke consent",
"revokeWarning": "Without consent for data processing, the service cannot be used.",
"granted": "Granted on",
"revoked": "Revoked"
},
"dsgvo": {
"title": "Privacy",
"export": "Export my data",
"exportDesc": "Download all data stored about you as a JSON file (Art. 15 GDPR).",
"exportButton": "Download data",
"exporting": "Compiling data...",
"exported": "Data export downloaded.",
"delete": "Delete account and data",
"deleteDesc": "All personal data will be irreversibly deleted or anonymized (Art. 17 GDPR). Distribution data will be retained in anonymized form (legal retention requirement).",
"deleteButton": "Permanently delete account",
"deleteConfirm": "Are you sure? This action cannot be undone.",
"deleteSuccess": "Your account has been deleted. You will now be logged out."
}
}