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 }); } }