Feat #24: Migrationen erzeugen, ohne die Suche kaputtzumachen #29

Merged
florian.wilde merged 1 commits from feat/24-migrations-wrapper into main 2026-08-23 17:25:53 +00:00
Owner

npm run db:migration -- <name> [--anwenden] erzeugt eine Migration, entfernt die DROP INDEX-Zeilen zu den Trigramm-Indizes aus prisma/sql/volltextsuche.sql und prüft nach dem Anwenden, dass sie noch stehen. npm run db:pruefen macht die Prüfung allein.

Bewusst eng gefasst: Nur eine DROP INDEX-Anweisung, die einen geschützten Index nennt, fällt weg. Ein DROP INDEX auf einen Prisma-eigenen Index bleibt stehen — der soll ja weg. Sonst würde das Skript die Suche retten und dafür das Schema zerlegen.

Beim Probelauf gefunden und behoben: Stimmen Schema und Datenbank überein, besteht der ganze Diff aus den beiden bekannten DROP-Zeilen. Das Skript legte dafür eine leere Migration an — und eine leere Migration in der Historie ist schlimmer als keine, weil sie als angewendet gilt. Jetzt bricht es vorher ab, ohne einen Ordner zu hinterlassen.

Geprüft: 12 Einheitstests, dazu von Hand beide Läufe gegen die echte Datenbank — einer mit Schemaänderung (erzeugt genau die gewünschte Datei), einer ohne (bricht sauber ab). Volle Unit-Suite grün: 647 Tests, Typecheck und Lint sauber.

Kein Changelog-Eintrag und keine Versionsnummer: Für die Anwendung ändert sich nichts.

Closes #24

`npm run db:migration -- <name> [--anwenden]` erzeugt eine Migration, entfernt die `DROP INDEX`-Zeilen zu den Trigramm-Indizes aus `prisma/sql/volltextsuche.sql` und prüft nach dem Anwenden, dass sie noch stehen. `npm run db:pruefen` macht die Prüfung allein. **Bewusst eng gefasst:** Nur eine `DROP INDEX`-Anweisung, die einen geschützten Index nennt, fällt weg. Ein `DROP INDEX` auf einen Prisma-eigenen Index bleibt stehen — der soll ja weg. Sonst würde das Skript die Suche retten und dafür das Schema zerlegen. **Beim Probelauf gefunden und behoben:** Stimmen Schema und Datenbank überein, besteht der ganze Diff aus den beiden bekannten DROP-Zeilen. Das Skript legte dafür eine leere Migration an — und eine leere Migration in der Historie ist schlimmer als keine, weil sie als angewendet gilt. Jetzt bricht es vorher ab, ohne einen Ordner zu hinterlassen. **Geprüft:** 12 Einheitstests, dazu von Hand beide Läufe gegen die echte Datenbank — einer mit Schemaänderung (erzeugt genau die gewünschte Datei), einer ohne (bricht sauber ab). Volle Unit-Suite grün: 647 Tests, Typecheck und Lint sauber. Kein Changelog-Eintrag und keine Versionsnummer: Für die Anwendung ändert sich nichts. Closes #24
florian.wilde added 1 commit 2026-08-23 17:25:43 +00:00
"prisma migrate diff" kennt die Trigramm-Indizes aus
prisma/sql/volltextsuche.sql nicht und schreibt deshalb in jede
Migration ein DROP INDEX dafuer. Fuenfmal mussten die Zeilen von Hand
raus. Auf dem Server waere es folgenlos geblieben - update.sh legt die
Indizes hinterher neu an -, in der Entwicklung dagegen waere die Suche
still langsam geworden.

  npm run db:migration -- <name> [--anwenden]
  npm run db:pruefen

Aufbau:
- Die Liste der geschuetzten Indizes steht an einer Stelle. Wer in
  prisma/sql/ einen hinzufuegt, traegt ihn dort ein.
- dropZeilenEntfernen() ist bewusst eng: Nur eine DROP-Anweisung, die
  einen geschuetzten Index nennt, faellt weg. Ein DROP INDEX auf einen
  Prisma-eigenen Index bleibt stehen - der soll ja weg. Ein Kommentar,
  der den Namen bloss erwaehnt, ebenfalls.
- Der Kopf der erzeugten Datei sagt, was entfernt wurde und warum.
- Nach --anwenden wird gegen die Datenbank geprueft, ob die Indizes
  wirklich noch stehen. Das ist der Unterschied zwischen "sollte
  gutgegangen sein" und "nachgesehen".

Beim Probelauf gefunden und behoben: Stimmen Schema und Datenbank
ueberein, besteht der ganze Diff aus den beiden bekannten DROP-Zeilen.
Das Skript legte dafuer eine leere Migration an - und eine leere
Migration in der Historie ist schlimmer als keine, weil sie als
angewendet gilt und niemand mehr weiss, wofuer sie gut war. Jetzt bricht
es vorher ab, ohne einen Ordner zu hinterlassen.

Die Typen liegen als .d.mts daneben: Das Skript bleibt .mjs und laeuft
ohne Bauschritt, die Tests laufen trotzdem nicht gegen "any".

Geprueft: zwoelf Einheitstests, dazu von Hand der Lauf mit echter
Schemaaenderung und der Lauf ohne.

Refs #24
florian.wilde merged commit 41e33ad85f into main 2026-08-23 17:25:53 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/betreuungs-cockpit#29