Fix "Empfänger"-Speicherfehler + Regeln bearbeiten (#10) #14
No reviewers
Labels
No labels
diskussion
feature-idee
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
budmin/finanzplaner!14
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/10-rules-edit-and-migration-fix"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #10.
Bug: Regel mit Feld "Empfänger" ließ sich nicht speichern
Ursache 1: Datenbanken von vor dem Merge von #4 haben noch den alten
CHECK (field IN ('buchungstext', 'vorgang'))-Constraint aufrules.field— SQLite kann Constraints nicht perALTER TABLEändern, und die damalige Migration hat nur die Spaltemerchant_nameergänzt, nicht diesen Constraint auf bestehenden DBs repariert. Der Fehler war zudem komplett unbehandelt (rohe Stacktrace-HTML-Seite).Fix: Migration macht jetzt einen Table-Rebuild (SQLite-Standardverfahren für Constraint-Änderungen), automatisch und idempotent beim Start.
Ursache 2 (beim Testen des Fixes gefunden): Der Table-Rebuild von
rulesper CREATE+DROP (statt RENAME) lässtrule_tags' Fremdschlüssel auf den zwischenzeitlich umbenannten/gelöschten Tabellennamen zeigen — SQLite schreibt Fremdschlüssel-Referenzen automatisch nur beiALTER TABLE ... RENAMEum, nicht bei CREATE+DROP. Jede spätere Schreiboperation aufrule_tags(z.B. beim Speichern eines Tags an einer Regel) crashte dadurch mit "no such table". Reproduziert und behoben, indemrule_tagsbeim Rebuild mit korrekter Referenz neu aufgebaut wird.Zusätzlich:
POST/PATCHauf Regeln laufen jetzt in einer einzigen Transaktion (Regel + Tags), damit bei einem Fehler nichts halb angewendet bleibt. Und ein globaler Express-Error-Handler sorgt dafür, dass jede unbehandelte Exception als sauberes JSON statt als Stacktrace-Seite rausgeht.Feature: Regeln bearbeiten
PATCH /api/rules/:idplus Bearbeiten-Button (✎) pro Regel, der das Formular mit den aktuellen Werten befüllt und in einen Update-Modus wechselt (inkl. "Abbrechen").Tests
db.test.tsreproduziert den ursprünglichen Crash gegen eine simulierte Vor-#4-Datenbank und verifiziert den Fix — inklusive einer gezielten Assertion, dass eine neuerule_tags-Zeile nach der Migration geschrieben werden kann (genau der Fall, der den zweiten Bug aufgedeckt hätte, wäre er nicht dabei gewesen). Zusätzlich end-to-end gegen eine echte alte Datenbank und eine frische Datenbank verifiziert (Anlegen, Bearbeiten, Löschen, inkl. Tag-Zuordnung, 404/400-Fälle). Bestehende Suite weiterhin grün (26 Tests).mentioned in commit
7e00d6e2e0