#!/bin/sh # WINDOWS #18 — trennt die Verbindung des Migrationsschritts von der # Verbindung des Laufzeitschritts (T-DGJ-03). # # `prisma migrate deploy` braucht die Rechte des Tabelleneigentuemers, um DDL # auszufuehren. Die Anwendung soll genau diese Rechte NICHT haben — sonst # waere die Rollentrennung aus Migration 20260909130000_rls_app_role wieder # verloren. Ohne getrennte Verbindungen fuer Migration und Laufzeit ist eine # Rollentrennung deshalb nicht moeglich. # # Vorgabe (ohne gesetztes TESSERA_MIGRATE_DATABASE_URL): beide Schritte # nutzen DATABASE_URL — exakt der bisherige Ablauf, unveraendert fuer # lokale Entwicklung, CI und den Server, bis # docs/mandantentrennung-datenbankrolle.md abgearbeitet ist. set -e if [ -z "$DATABASE_URL" ]; then echo "FEHLER: DATABASE_URL ist nicht gesetzt." >&2 exit 1 fi # In sh ersetzt ${VAR:-fallback} auch eine gesetzte, aber leere Variable # durch den Fallback — Compose reicht nicht belegte Variablen als leere # Zeichenketten weiter, das soll wie "nicht gesetzt" behandelt werden. MIGRATE_URL="${TESSERA_MIGRATE_DATABASE_URL:-$DATABASE_URL}" if [ -n "$TESSERA_MIGRATE_DATABASE_URL" ]; then MIGRATE_SOURCE="TESSERA_MIGRATE_DATABASE_URL" else MIGRATE_SOURCE="DATABASE_URL" fi RUNTIME_SOURCE="DATABASE_URL" if [ "$1" = "--print-plan" ]; then # Nur Variablennamen ausgeben, niemals Werte — diese Betriebsart existiert # allein, damit die CI das Verhalten ohne Datenbank pruefen kann. echo "Migrationsschritt verwendet: $MIGRATE_SOURCE" echo "Laufzeitschritt verwendet: $RUNTIME_SOURCE" exit 0 fi # DATABASE_URL nur fuer diesen einen Aufruf auf die Migrationsverbindung # setzen (vorangestellte Zuweisung, kein export) — der nachfolgende exec # erbt die unveraenderte DATABASE_URL aus der Umgebung. DATABASE_URL="$MIGRATE_URL" apps/api/node_modules/.bin/prisma migrate deploy --schema apps/api/prisma/schema.prisma # exec statt Aufruf, damit Signale (z. B. SIGTERM bei docker stop) den # Node-Prozess erreichen. Die bisherige CMD-Zeile hatte dieses Problem # ebenfalls und loeste es nicht; hier wird es nebenbei mitbehoben. exec node apps/api/dist/main.js