| quick-260805-fok |
01 |
api |
| nestjs |
| prisma |
| groups |
| multi-tenancy |
| onapplicationbootstrap |
|
| phase |
provides |
| 15-modul-berechtigungen-gruppen-user-grants |
Group/GroupMembership/ModuleGrant-Schema, partieller Unique-Index Group_one_default_per_tenant, GroupsService.addUserToDefaultGroup |
|
|
| GroupsService.ensureDefaultGroup(tenantId) — race-sichere, idempotente Standardgruppen-Anlage mit Null-Gruppen-Wächter (D-13) |
| TenantService.create verdrahtet mit ensureDefaultGroup |
| AdminSeedService.ensureDefaultGroupsForAllTenants() — Startup-Reparatur über alle Mandanten |
|
| groups |
| tenant |
| user |
| admin-seed |
|
| added |
patterns |
|
|
| Sequenzielle await-Kette in onApplicationBootstrap statt Verlass auf Nest-Hook-Reihenfolge zwischen Modulen (Muster aus tender-scheduler.service.ts übernommen) |
| Interaktive Prisma-Transaktion ($transaction mit async-Callback) statt Array-Form, wenn spätere Schritte die id eines vorherigen Schritts brauchen |
|
|
| created |
modified |
| apps/api/src/tenant/tenant.service.spec.ts |
| apps/api/src/user/admin-seed.service.spec.ts |
|
| apps/api/src/groups/groups.service.ts |
| apps/api/src/groups/groups.service.spec.ts |
| apps/api/src/tenant/tenant.service.ts |
| apps/api/src/tenant/tenant.module.ts |
| apps/api/src/user/admin-seed.service.ts |
|
|
| Wächter prüft ausschließlich group.count === 0, nie das Fehlen der isDefault-Markierung — ein Mandant mit Gruppen ohne Markierung ist eine bewusste Admin-Entscheidung (D-13) und wird nie überschrieben |
| Reparatur läuft als zweiter sequenzieller await-Schritt in AdminSeedService.onApplicationBootstrap, NICHT als eigener Hook in GroupsModule — GroupsModule ist Dependency von UserModule, seine Hooks liefen sonst vor der Tenant-Anlage |
| P2002 aus dem partiellen Index Group_one_default_per_tenant wird in ensureDefaultGroup abgefangen und liefert null, propagiert nicht — der Index bleibt der eigentliche Durchsetzungspunkt |
|
|
| id |
description |
requirement |
verification |
human_judgment |
| D1 |
GroupsService.ensureDefaultGroup(tenantId) legt für einen Mandanten ohne jede Gruppe die Standardgruppe 'Alle Benutzer' an, mit Mitgliedern und Modul-Grants, race-sicher und idempotent |
260805-fok |
| kind |
ref |
status |
| unit |
apps/api/src/groups/groups.service.spec.ts#ensureDefaultGroup() |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D2 |
TenantService.create ruft ensureDefaultGroup auf; Fehler werden protokolliert, nicht propagiert |
260805-fok |
| kind |
ref |
status |
| unit |
apps/api/src/tenant/tenant.service.spec.ts |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D3 |
AdminSeedService führt die Standardgruppen-Anlage vor dem Super-Admin-Anlegen aus und repariert am Ende von onApplicationBootstrap alle Mandanten ohne Gruppe, unabhängig von den frühen Rückkehrpfaden |
260805-fok |
| kind |
ref |
status |
| unit |
apps/api/src/user/admin-seed.service.spec.ts |
pass |
|
|
false |
|
| id |
description |
verification |
human_judgment |
| D4 |
Kein Schemawechsel, keine neue Migration — 24 Migrationsverzeichnisse unverändert, schema.prisma unverändert |
| kind |
ref |
status |
| other |
test "$(ls -1d apps/api/prisma/migrations/*/ | wc -l)" -eq 24 && git diff --quiet -- apps/api/prisma/schema.prisma |
pass |
|
|
false |
|
|
6min |
2026-08-05 |
complete |