feat(customers): add initial admin bootstrap and csv import

This commit is contained in:
DS | Schubert 2026-07-03 09:14:56 +02:00
parent c816e9869d
commit ecab0fe6b6
27 changed files with 1197 additions and 34 deletions

View file

@ -105,6 +105,7 @@ uv run alembic upgrade head
- Erfolg und Fehler in mutierenden CRUD-Flows ueber den Toast-Provider melden.
- Keine Browser-Dialoge wie `alert()` oder `confirm()`.
- Keine Tokens in Browser-JavaScript speichern.
- Datei-Uploads vom Browser laufen ueber Athena-BFF-Routen und werden serverseitig an Hermes weitergeleitet.
### Backend
@ -118,6 +119,7 @@ uv run alembic upgrade head
- Berechtigungen mit `require_permission`, `require_any_permission` oder `require_all_permissions` pruefen.
- Mutierende Kernaktionen mit Audit Logs erfassen, sofern fachlich relevant.
- Sensible Felder vor Persistenz in Logs oder Audit-Daten maskieren.
- Import- und Bootstrap-Flows duerfen keine Passwoerter, Tokens, Secrets oder vollstaendige CSV-Inhalte loggen.
### Allgemein
@ -143,6 +145,7 @@ Diese Regeln sind verbindlich:
- Frontend-Permissions dienen nur der UI und ersetzen keine Backend-Pruefung.
- Audit Logs werden serverseitig in Hermes geschrieben.
- Neue Plattform-Endpunkte sollen das einheitliche API-Response-Format nutzen.
- Header- und Benutzerkontext wird ueber `GET /api/me` geladen; hart codierte Benutzernamen sind unzulaessig.
Wenn eine Aufgabe diese Regeln zu verletzen scheint, muss zuerst die Architekturentscheidung geklaert werden.
@ -196,6 +199,31 @@ Ein neues CRM-Modul soll sich am Kundenmodul orientieren:
Dashboard-Widgets fuer noch nicht implementierte Module muessen Empty States anzeigen statt hart codierter Beispieldaten.
### Kundenimport
Kundenimporte muessen die bestehende Kundenarchitektur nutzen und ueber Athena-BFF-Routen laufen. Der Browser darf keine Hermes-URL kennen.
CSV-Vorgaben:
- UTF-8 bevorzugen
- Semikolon und Komma unterstuetzen
- leere Zeilen ignorieren
- Fehler und Warnungen pro Zeile zurueckgeben
- Preview darf keine Datenbank-Aenderungen ausloesen
- Commit schreibt Audit Logs ohne CSV-Rohinhalt
Importmodi:
- `create_only`
- `update_existing`
- `upsert`
Die Excel-freundliche Vorlage liegt unter `GET /api/customers/import/template`.
### Deployment
Neue Installationen koennen optional ueber `INITIAL_ADMIN_*` einen initialen Administrator anlegen. Diese Variablen werden nur von Hermes gelesen und duerfen nicht im Frontend oder in Logs erscheinen.
### Neue Permissions
Neue Module muessen eigene stabile Permission-Strings erhalten.