CMP-02: dsgvo-datenschutz-berichte
- migrations/0009_data_subject_ref: additive nullable Spalte auf retention_objects, schliesst die Luecke fuer 'betroffene Person' in RET-01 - retention.RegisterObjectForSubject: NEUE additive Funktion, RegisterObject selbst unveraendert (kein Diff, keine Produktionsaufrufer betroffen) - archive/internal/dpreport: SubjectReport (Auskunftsbericht), ProcessingOverview (Verarbeitungsuebersicht, statisch gepflegte Zweck/Rechtsgrundlage je Objekttyp), WriteSubjectReportCSV - Mandantentrennung strukturell durch Modell C (ein Pool pro Tenant), real mit zwei physisch getrennten Tenant-DBs bewiesen (tenant_acme/ tenant_globex), nicht nur behauptet - 4 Tests, alle Pflichtpruefungen real bestanden - Migration real auf dms_tenant_test angewendet Pruefungen siehe archive/docs/CMP-02-PRUEFPROTOKOLL.md
This commit is contained in:
@@ -43,6 +43,28 @@ func RegisterObject(ctx context.Context, pool *pgxpool.Pool, objectType, objectR
|
||||
return id, nil
|
||||
}
|
||||
|
||||
// RegisterObjectForSubject ist CMP-02s additive Ergänzung zu
|
||||
// RegisterObject: registriert das Objekt zusätzlich mit einer Referenz
|
||||
// auf die betroffene Person (dataSubjectRef, z. B. E-Mail oder
|
||||
// User-ID), Grundlage für den DSGVO-Auskunftsbericht. Leeres
|
||||
// dataSubjectRef bedeutet: nicht personenbezogen, kein Fehler.
|
||||
// RegisterObject selbst bleibt unverändert (kein Umbau bestehenden
|
||||
// Verhaltens) — dies ist ein separater, additiver Registrierungsweg.
|
||||
func RegisterObjectForSubject(ctx context.Context, pool *pgxpool.Pool, objectType, objectReference, dataSubjectRef string) (string, error) {
|
||||
var id string
|
||||
err := pool.QueryRow(ctx, `
|
||||
INSERT INTO retention_objects (object_type, object_reference, data_subject_ref)
|
||||
VALUES ($1, $2, NULLIF($3, ''))
|
||||
ON CONFLICT (object_type, object_reference)
|
||||
DO UPDATE SET data_subject_ref = COALESCE(NULLIF(EXCLUDED.data_subject_ref, ''), retention_objects.data_subject_ref)
|
||||
RETURNING id
|
||||
`, objectType, objectReference, dataSubjectRef).Scan(&id)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("retention: objekt mit betroffener person registrieren: %w", err)
|
||||
}
|
||||
return id, nil
|
||||
}
|
||||
|
||||
// Assignment ist EINE historische Zuordnung einer Aufbewahrungsklasse.
|
||||
type Assignment struct {
|
||||
RetentionClass string
|
||||
|
||||
Reference in New Issue
Block a user