From 344a33805a9a25de3ff68d38f70633b6fca763e5 Mon Sep 17 00:00:00 2001 From: noroot Date: Fri, 28 Aug 2026 21:43:04 +0200 Subject: [PATCH] fix: Migration 0008 auf Bestandsdaten mit alten Rollenwerten vorbereiten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beim ersten Deploy-Versuch auf dem Testsystem schlug die neue app_user_role_check-Constraint fehl, weil echte Bestandszeilen noch alte Rollenwerte (admin, creator) trugen — die Migration ging naiv davon aus, dass es keine bestehenden Nutzer mit alten Rollen gäbe. Fix: alte Constraint zuerst droppen (sie kennt neue Werte wie "betreiber" noch nicht und hätte die Datenmigration selbst blockiert), dann bestehende Zeilen umschreiben (admin -> betreiber, da das die alte Plattform-Betreiber-Rolle war, nicht der neue mandantenbezogene admin; creator/agentur/marke/kanzlei -> mitarbeiter), erst danach die neue Constraint scharf schalten. Lokal gegen eine Datenbank mit manuell eingefügten Alt-Rollen-Zeilen verifiziert (0001-0007 anwenden, Testdaten einfügen, 0008 anwenden, Rollen prüfen). --- .../0008_pivot_ki_antragspruefung.up.sql | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/internal/store/migrations/0008_pivot_ki_antragspruefung.up.sql b/internal/store/migrations/0008_pivot_ki_antragspruefung.up.sql index ceb7267..867e086 100644 --- a/internal/store/migrations/0008_pivot_ki_antragspruefung.up.sql +++ b/internal/store/migrations/0008_pivot_ki_antragspruefung.up.sql @@ -29,9 +29,22 @@ ALTER TABLE account DROP COLUMN IF EXISTS verified; -- betreiber Ebene 5 — Netcell-IT-Personal, plattformweit -- (Werkzeugkatalog, Regelwerk, Mandantenverwaltung); -- entspricht der alten "admin"-Rolle vor dieser Migration --- Die alten Rollen (creator/agentur/marke/kanzlei) haben im neuen --- Produkt keine Bedeutung mehr. +-- +-- Die alte CHECK-Constraint muss zuerst weg, sonst lehnt sie die +-- Datenmigration unten (die neue Rollenwerte wie "betreiber" schreibt) +-- sofort ab — die alte Constraint kennt diese Werte ja noch nicht. ALTER TABLE app_user DROP CONSTRAINT app_user_role_check; + +-- Bestehende Zeilen auf gültige neue Werte umstellen, bevor die neue +-- Constraint das erzwingt — sonst schlägt sie auf jeder Installation +-- mit echten Nutzern fehl. Die alte Rolle "admin" war der Plattform- +-- Betreiber (Netcell-IT) — wird zu "betreiber", nicht zum neuen, +-- mandantenbezogenen "admin". Alle anderen alten Rollen (creator/agentur/ +-- marke/kanzlei) waren gewöhnliche Mandanten-Logins ohne Sonderrechte — +-- werden zu "mitarbeiter", der schlankesten neuen Rolle. +UPDATE app_user SET role = 'betreiber' WHERE role = 'admin'; +UPDATE app_user SET role = 'mitarbeiter' WHERE role IN ('creator', 'agentur', 'marke', 'kanzlei'); + ALTER TABLE app_user ADD CONSTRAINT app_user_role_check CHECK (role IN ('mitarbeiter', 'verantwortlicher', 'pruefer', 'admin', 'betreiber'));