Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0143yYvjesjHndBACoweyK67
1.7 KiB
1.7 KiB
PROJ-3: Mitgliederverwaltung
Status: Deployed
Created: 2026-09-11 (retro-dokumentiert, gebaut in 5e6ee2c + b38a5a4)
Summary
Mitglieder eines Vereins verwalten: Liste, Status-Aktionen (aktivieren/deaktivieren), Anbindung an Matrix-Membership-Sync (deaktivierte Mitglieder werden aus Matrix-Räumen entfernt).
Built
backend/src/routes/members.tsfrontend/src/pages/MembersPage.tsx- Mitglied-Status-Aktionen + Deaktivierungs-Sync (commit
b38a5a4) - Nachtrag 2026-09-11 (commit
bc4d749):DELETE /api/members/:memberId— Admin-only, hartes Löschen. Audit-Log-Eintrag wird vor dem Delete geschrieben (audit_logs.targetIdist unconstrained text, überlebt das Löschen). Matrix-Account wird perdeactivateUser(matrixUserId, erase=true)gelöscht. Abhängige Daten (parent_links,team_members,org_roles) laufen über bestehendeonDelete: cascade-FKs mit. Frontend: Bestätigungsdialog (AlertDialog) im Dropdown-Menü der Mitgliederliste.
Acceptance Criteria
- Mitgliederliste pro Verein abrufbar (paginiert)
- Status ändern (aktiv/inaktiv) durch berechtigte Rollen
- Deaktivierung löst Sync-Schritt Richtung Matrix aus
- Mitglied kann durch Org-Admin endgültig gelöscht werden (mit Bestätigungsdialog im Frontend)
- Löschen entfernt/erased den zugehörigen Matrix-Account und alle abhängigen Datensätze (Team-Zuordnungen, Rollen, Eltern-Verknüpfungen)
- Audit-Log-Eintrag bleibt nach dem Löschen erhalten
Open Items
- Vollständige Membership-Sync mit Outbox/Retry/Reconciliation laut PRD noch nicht fertig — aktuell nur direkter Sync-Aufruf, kein Retry-Mechanismus geprüft
Notes
Retro-Spec. Löschen-Feature am 2026-09-11 nachgebaut und getestet auf talkhub-LXC (192.168.66.8).