Die drei neuen Wartungsskripte bauten sich einen eigenen PrismaClient und gingen damit an src/lib/prisma.ts vorbei. Dort wird DATABASE_URL aus den DB_*-Teilen zusammengesetzt, falls sie fehlt - und genau das ist bei `docker compose exec <dienst> npx tsx prisma/<skript>.ts` der Fall: Der Entrypoint exportiert sie nur in den Serverprozess, eine neue Shell erbt sie nicht. Ergebnis war "Environment variable not found: DATABASE_URL". Der Kommentar in src/lib/prisma.ts beschreibt genau diesen Fall; die Loesung war da, ich habe sie nur umgangen. Betroffen war auch rolle-zuweisen.ts. Das ist der Weg, den die Startwache im Klartext nennt, wenn kein Konto mehr die Pflichtrechte haelt - er haette in dem Moment versagt, fuer den er gebaut ist. Geprueft mit entzogener DATABASE_URL und nur DB_*-Teilen in der Umgebung: rechte-report, rolle-zuweisen --liste und sync-roles laufen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
35 lines
1.4 KiB
TypeScript
35 lines
1.4 KiB
TypeScript
/**
|
|
* Bringt Rechtekatalog und Systemrollen beim Container-Start auf Stand.
|
|
*
|
|
* Hintergrund: seed.ts laeuft nur auf leeren Datenbanken (USER_COUNT=0). Wer
|
|
* das System schon installiert hat, bekommt nachtraeglich hinzugefuegte
|
|
* Rechte oder geaenderte Rollenzuordnungen sonst NICHT.
|
|
*
|
|
* Die Definition selbst steht in `src/config/rechte-katalog.ts`, die Logik in
|
|
* `src/services/rollen-sync.service.ts`. Dieses Skript ist nur noch der
|
|
* Einstiegspunkt fuer die Kommandozeile - bis 09/2026 trug es eine eigene
|
|
* Kopie des Katalogs, und es war nicht die einzige.
|
|
*
|
|
* KEINE Stammdaten, KEINE Benutzer, KEINE Vertraege - auf laufenden
|
|
* Produktionsdatenbanken sicher.
|
|
*/
|
|
|
|
// Ueber src/lib/prisma.js, NICHT ueber einen eigenen PrismaClient: Dort wird
|
|
// DATABASE_URL aus den DB_*-Teilen zusammengesetzt, falls sie fehlt. Bei
|
|
// `docker compose exec <dienst> npx tsx prisma/<skript>.ts` ist genau das der
|
|
// Fall - der Entrypoint exportiert sie nur in den Serverprozess, eine neue
|
|
// Shell erbt sie nicht. Ein eigener Client scheitert dort mit
|
|
// "Environment variable not found: DATABASE_URL".
|
|
import prisma from '../src/lib/prisma.js';
|
|
import { synchronisiereRechteUndRollen } from '../src/services/rollen-sync.service.js';
|
|
|
|
|
|
synchronisiereRechteUndRollen(prisma)
|
|
.catch((e) => {
|
|
console.error('[rollen-sync] Fehler:', e);
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
});
|