deleteOldMailBlocked löscht weiter rohe Einträge nach 24h (Datenminimierung für Mail-Inhalte, DSGVO Art. 5 Abs. 1 lit. c). Aber für Charts und Pattern-Analysen werden vor dem Cleanup permanent aggregierte Daten in einer separaten Tabelle geführt. Architektur: - Neue Tabelle mail_blocked_stats — UNIQUE (user_id, date, connection_id), enthält ausschließlich counts + UTC-Datum + IMAP-Host. Kein Subject, kein Sender, kein Mail-Inhalt. Datenminimierung jetzt auch im Audit- Pfad sichtbar. - Live-Aggregation: scan.post.ts + scan-internal.post.ts upserten direkt nach jedem mail_blocked-INSERT in mail_blocked_stats (count += 1). - 30-Tage-Backfill als SQL im Migration-File: bestehende mail_blocked- Rows der letzten 30 Tage werden einmalig aggregiert, damit Charts nicht 30 Tage lang leer aussehen. - Stats-Endpoints (blocked-by-day, blocked-by-connection) lesen jetzt aus mail_blocked_stats. Response-Shape unverändert → Frontend bleibt unberührt. ON DELETE CASCADE auf mail_connection_id (Hans-Müller-konservativ): User-initiierter Disconnect = Art. 17-Signal → assoziierte Stats werden mitgelöscht. SetNull wäre DSGVO-grenzwertig (orphan stats ohne klare Lösch-Kontext-Zuordnung). pnpm build:backend clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
Self-hosted mirror of rebreak monorepo
Languages
TypeScript
68%
Vue
7.9%
Swift
7.7%
Shell
4.2%
JavaScript
3.1%
Other
8.9%