0d7d8a597e
- TenantService.create ruft nach prisma.tenant.create ensureDefaultGroup auf; Fehler werden protokolliert, nicht propagiert (Muster aus UserService.create) - tenant.module.ts importiert GroupsModule (keine Zirkularitaet, wie UserModule bereits vormacht) - AdminSeedService.onApplicationBootstrap besteht jetzt aus zwei sequenziellen await-Schritten: seedAdmin() (bisheriger Rumpf, plus ensureDefaultGroup nach dem Tenant-Upsert und VOR user.create), dann ensureDefaultGroupsForAllTenants() als abschliessende Reparatur ueber ALLE Mandanten — laeuft unabhaengig von seedAdmin()s fruehen Rueckkehrpfaden (fehlende ENV / Admin existiert bereits) und ist je Mandant sowie insgesamt try/catch-gekapselt, blockiert den API-Start nie - Reparatur sitzt bewusst NICHT als eigener onApplicationBootstrap-Hook in GroupsModule (Ordering-Falle aus tender-scheduler.service.ts) - tenant.service.spec.ts, admin-seed.service.spec.ts (neu): Reihenfolge, beide fruehen Rueckkehrpfade, Fehlerisolation je Mandant, Idempotenz ueber zwei Bootstrap-Laeufe
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { Injectable, Logger } from '@nestjs/common';
|
|
import { GroupsService } from '../groups/groups.service';
|
|
import { PrismaService } from '../prisma/prisma.service';
|
|
|
|
@Injectable()
|
|
export class TenantService {
|
|
private readonly logger = new Logger(TenantService.name);
|
|
|
|
constructor(
|
|
private prisma: PrismaService,
|
|
private readonly groupsService: GroupsService,
|
|
) {}
|
|
|
|
async findAll() {
|
|
return this.prisma.tenant.findMany();
|
|
}
|
|
|
|
async findById(id: string) {
|
|
return this.prisma.tenant.findUnique({ where: { id } });
|
|
}
|
|
|
|
/**
|
|
* Legt einen Mandanten an und stellt unmittelbar danach dessen
|
|
* Standardgruppe her (D-06/D-13), damit ein frisch angelegter Mandant
|
|
* ab dem ersten Benutzer nutzbar ist. Schlägt ensureDefaultGroup fehl,
|
|
* wird der Fehler protokolliert statt propagiert — die Mandanten-Anlage
|
|
* selbst war erfolgreich, und die Startup-Reparatur in
|
|
* AdminSeedService.ensureDefaultGroupsForAllTenants holt eine
|
|
* gescheiterte Gruppenanlage beim nächsten API-Start nach (Muster aus
|
|
* UserService.create).
|
|
*/
|
|
async create(data: { name: string; slug: string }) {
|
|
const tenant = await this.prisma.tenant.create({ data });
|
|
|
|
try {
|
|
await this.groupsService.ensureDefaultGroup(tenant.id);
|
|
} catch (err) {
|
|
this.logger.error(
|
|
`Standardgruppen-Anlage fehlgeschlagen für Mandant '${tenant.id}': ${
|
|
err instanceof Error ? err.message : String(err)
|
|
}`,
|
|
);
|
|
}
|
|
|
|
return tenant;
|
|
}
|
|
|
|
async update(id: string, data: { name?: string; slug?: string; isActive?: boolean }) {
|
|
return this.prisma.tenant.update({ where: { id }, data });
|
|
}
|
|
}
|