feat(backend): optionaler Stresstest-Seed fuer 300 User mit gemischten Haushalten #220

Open
opened 2026-07-04 13:55:31 +02:00 by niboer · 0 comments
Owner

Beschreibung

Optionaler Seed-Script-Modus, der 300 zufaellige User (Personen + Keycloak-User) mit gemischten Haushalten erzeugt.
Das Script soll zur Laufzeit komplett zufallsgeneriert sein — keine hartkodierten UUIDs oder Namen.

Anforderungen

Verhaeltnis Aktiv/Archiviert

  • 60 % aktive Personen (180)
  • 40 % archivierte Personen (120, archivedAt gesetzt)

Haushalte (Groups)

  • 300 Personen werden auf ca. 100–150 Haushalte verteilt
  • Gemischte Haushaltsgroessen: 1–5 Personen pro Haushalt
  • Einige Haushalte mit nur einer Person (Einzelhaushalte)
  • Einige Grosshaushalte (4–5 Personen)
  • Jeder Haushalt hat einen Creator (eine der Personen im Haushalt)

Keycloak-User

  • Jede aktive Person bekommt einen Keycloak-User (archivierte nicht)
  • Username: zufaellig generiert (z. B. vorname.nachname + ggf. Nummer bei Duplikaten)
  • Rollenverteilung: ca. 5 % app-admin, 15 % event-admin, 80 % app-user
  • Zufaellige 12-Zeichen-Passwoerter (analog generatePassword() in keycloak-provision.ts)
  • Passwort-Tabelle wird am Ende auf der Konsole ausgegeben

Seed-Ausfuehrung

  • Optionaler Modus, gesteuert durch Umgebungsvariable oder CLI-Argument (z. B. STRESS_TEST_SEED=true oder npm run seed:stress)
  • Laueft NACH dem normalen Seed (bzw. ersetzt ihn nicht)
  • komplett unabhaengig vom normalen Seed — erzeugt nur zusaetzliche Daten
  • Sicherheitsabfrage vor Ausfuehrung ("Wirklich 300 User anlegen?")
  • Soll in APP_ENV=development / test laufen, NIEMALS in production

Datenqualitaet

  • Vornamen und Nachnamen aus einer vordefinierten Liste (50+ deutsche Vornamen, 30+ Nachnamen)
  • Zufaellige Email-Adressen (vorname.nachname.ZUFALL@example.com)
  • Optional: Zufaellige Telefonnummern und Adressen
  • Kontaktdaten via encrypt() verschluesselt (wie bestehender Seed)

Referenzen im bestehenden Code

  • backend/src/lib/keycloak-provision.tsgeneratePassword(), ensureUser() als Vorlage fuer Keycloak-User-Erstellung
  • backend/prisma/seed.ts — Vorlage fuer DB-Seed-Struktur (Persons, Groups, GroupMembers, ContactData via encrypt())
  • backend/prisma/schema.prisma — Datenmodell (Person, Group, GroupMember, ContactData)

Akzeptanzkriterien

  • npm run seed:stress (oder aquivalenter Befehl) erstellt 300 Personen, 180 Keycloak-User, 100-150 Gruppen
  • 60:40-Verhaeltnis aktiv/archiviert
  • Gemischte Haushaltsgroessen (1–5 Personen)
  • Rollenverteilung app-admin (5 %), event-admin (15 %), app-user (80 %)
  • Alle Kontaktdaten via encrypt() verschluesselt
  • Ausfuehrung nur in development/test mit Sicherheitsabfrage
  • Bestehender Seed wird nicht beeinflusst
  • Passwort-Tabelle am Ende der Ausfuehrung sichtbar
## Beschreibung Optionaler Seed-Script-Modus, der 300 zufaellige User (Personen + Keycloak-User) mit gemischten Haushalten erzeugt. Das Script soll zur Laufzeit komplett zufallsgeneriert sein — keine hartkodierten UUIDs oder Namen. ## Anforderungen ### Verhaeltnis Aktiv/Archiviert - 60 % aktive Personen (180) - 40 % archivierte Personen (120, `archivedAt` gesetzt) ### Haushalte (Groups) - 300 Personen werden auf ca. 100–150 Haushalte verteilt - Gemischte Haushaltsgroessen: 1–5 Personen pro Haushalt - Einige Haushalte mit nur einer Person (Einzelhaushalte) - Einige Grosshaushalte (4–5 Personen) - Jeder Haushalt hat einen Creator (eine der Personen im Haushalt) ### Keycloak-User - Jede aktive Person bekommt einen Keycloak-User (archivierte nicht) - Username: zufaellig generiert (z. B. `vorname.nachname` + ggf. Nummer bei Duplikaten) - Rollenverteilung: ca. 5 % `app-admin`, 15 % `event-admin`, 80 % `app-user` - Zufaellige 12-Zeichen-Passwoerter (analog `generatePassword()` in `keycloak-provision.ts`) - Passwort-Tabelle wird am Ende auf der Konsole ausgegeben ### Seed-Ausfuehrung - Optionaler Modus, gesteuert durch Umgebungsvariable oder CLI-Argument (z. B. `STRESS_TEST_SEED=true` oder `npm run seed:stress`) - Laueft NACH dem normalen Seed (bzw. ersetzt ihn nicht) - komplett unabhaengig vom normalen Seed — erzeugt nur zusaetzliche Daten - Sicherheitsabfrage vor Ausfuehrung ("Wirklich 300 User anlegen?") - Soll in `APP_ENV=development` / `test` laufen, NIEMALS in production ### Datenqualitaet - Vornamen und Nachnamen aus einer vordefinierten Liste (50+ deutsche Vornamen, 30+ Nachnamen) - Zufaellige Email-Adressen (`vorname.nachname.ZUFALL@example.com`) - Optional: Zufaellige Telefonnummern und Adressen - Kontaktdaten via `encrypt()` verschluesselt (wie bestehender Seed) ### Referenzen im bestehenden Code - `backend/src/lib/keycloak-provision.ts` — `generatePassword()`, `ensureUser()` als Vorlage fuer Keycloak-User-Erstellung - `backend/prisma/seed.ts` — Vorlage fuer DB-Seed-Struktur (Persons, Groups, GroupMembers, ContactData via `encrypt()`) - `backend/prisma/schema.prisma` — Datenmodell (Person, Group, GroupMember, ContactData) ## Akzeptanzkriterien - [ ] `npm run seed:stress` (oder aquivalenter Befehl) erstellt 300 Personen, 180 Keycloak-User, 100-150 Gruppen - [ ] 60:40-Verhaeltnis aktiv/archiviert - [ ] Gemischte Haushaltsgroessen (1–5 Personen) - [ ] Rollenverteilung app-admin (5 %), event-admin (15 %), app-user (80 %) - [ ] Alle Kontaktdaten via `encrypt()` verschluesselt - [ ] Ausfuehrung nur in development/test mit Sicherheitsabfrage - [ ] Bestehender Seed wird nicht beeinflusst - [ ] Passwort-Tabelle am Ende der Ausfuehrung sichtbar
Sign in to join this conversation.
No description provided.