Release-Konsolidierung: Migrationen, Snapshot-, Transfer- und Befehlsversionen auf einen einheitlichen Stand bringen #22
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Zweck
Während der Entwicklung sind viele Migrationen und Schemaversionen entstanden, jeweils mit Kompatibilitätsschichten für ältere Stände. Sobald die Leistungsbilanz einen Releasestand erreicht, soll alles auf eine neue Baseline zusammengeführt werden. Dabei entfällt der Kompatibilitätscode für Vor-Release-Stände.
Dieses Issue wird bis zum Release fortgeschrieben. Jede neue Migration, jede Snapshot-, Transfer- oder Befehlsversion und jede additive Erweiterung ohne Versionssprung wird hier als Kommentar ergänzt, damit bei der Release-Migration nichts vergessen wird.
Stand der Analyse:
main@b50c00c(27.09.2026). In Arbeit: #3 (Einspeisung) auffeature/issue-3-logical-feeds, voraussichtlich Migration0012und Snapshot-Schema 9.Inventar
SQL-Migrationen (
src/db/migrations)projects.is_public_buildingexternal_csv_configurationsexternal_import_batches.configuration_versioncircuit_device_rows.manual_quantity+ Backfill ausquantitydocument_branding_assetsdocument_branding_settingsbuildings,floors.building_idestimate_balances/_groups/_rows)rooms.area_m20000war bereits eine Zusammenführung. Ältere Entwicklungsdatenbanken werden seitdem nicht mehr unterstützt, und genau dieses Muster wird hier wiederholt.Projekt-Snapshot-Schema (
project-state-snapshot.model.ts, aktuell 8)isPublicBuilding = falseexternalCsvConfiguration = nullmanualQuantitymanualQuantity = quantitynullnullfloors.buildingIdnullrooms.areaM2nullDazu kommt
normalizeSnapshotPhaseTypes(leitetphaseTypefür ältere Stände ab). Die Datei hat 1287 Zeilen, ein großer Teil davon sind Legacy-Zod-Schemas und die Upgrade-Kette.Transferformat (
project-transfer.model.ts)Der eingebettete Snapshot bringt seine eigene Schemaversion mit.
Befehlsversionen (gespeichert in der Projekthistorie)
project-floor.*: v2 (buildingId), v1 legacyproject-room.*: v2 (areaM2), v1 legacyproject.update-settings: v3 (Deckblatt), v2 und v1 legacyproject.restore-state: v2, v1 (snapshotRestore) legacydistribution-board.updatev1: Infofelder optionalnormalizeDistributionBoardSubtreeSnapshotergänzt fehlende Infofelder mitnulldistribution-board.insert:normalizeDistributionBoardStructureProjectCommandWeitere versionierte Formate
externalCsvConfigurationSchemaVersion = 1external_import_batches.configuration_version: monotone Fachversion der Projektkonfiguration. Keine Kompatibilitätsschicht, bleibt bestehen.Wo versionierte Daten gespeichert sind
project_revisions/project_change_sets/project_history_stack_entries: Befehle mitschemaVersionfür Undo/Redoproject_snapshots: benannte und automatische Snapshots mitschemaVersionexternal_csv_configurations: JSON mit SchemaversionWas bei einem sauberen Schnitt entfällt
normalizeSnapshotPhaseTypesupgrade*Commandfür Etagen, Räume, Projekteinstellungen und Restore v1 (project-location-structure-project-command.model.tshat allein 803 Zeilen, ein erheblicher Teil ist Legacy)project-state-snapshot.test.ts,project-building-structure.test.ts,project-location-structure-project-command.repository.test.ts)Grob geschätzt sind das mehrere hundert Zeilen Produktivcode plus Tests und Doku.
Was bleibt: der Versionierungsmechanismus selbst (
schemaVersionin Befehlen, Snapshots und Transfer, das Upgrade-Muster). Ab dem Release gilt er wieder streng: Jede Änderung braucht eine neue Migration bzw. Version mit Upgrade-Pfad, angewendete Migrationen werden nie geändert.Strategie (Vorschlag)
A) Sauberer Schnitt (empfohlen):
0000aus dem aktuellen Schema erzeugen.global_devices), Büroangaben und Logo (document_branding_*).B) Daten in-place umschreiben (gespeicherte Befehle und Snapshots auf den neuesten Stand heben): nicht empfohlen, weil aufwendig und fehleranfällig, bei wenig Nutzen vor dem ersten Produktivbetrieb.
Offene Entscheidungen
Checkliste Release-Migration (fortschreiben)
Fortschreibung
Bitte bei jeder neuen Migration und jeder neuen Snapshot-, Transfer- oder Befehlsversion bis zum Release einen Kommentar ergänzen: Was kam hinzu, wo liegt die Hochstufung, was entfällt beim Schnitt?
Fortschreibung nach PR #25 / Merge-Commit
68d986f:0013_users: globale Tabelleusersmit Anmeldename, scrypt-Passwort-Hash, Anzeigename, fester Rolle (admin/user), Aktivstatus, erzwungenem Passwortwechsel und Zeitstempeln; eindeutiger Index auf dem normalisierten Anmeldenamen.usersin die neue Baseline aufgenommen werden. Benutzerkonten sind zusätzlich zu globaler Gerätebibliothek und Büro-Branding als globale Daten zu entscheiden. Empfohlen ist, Konten über den Bootstrap-Admin und die Benutzerverwaltung neu anzulegen, statt Passwort-Hashes über den Projekttransfer zu bewegen.COOKIE_SECUREfür HTTP/HTTPS erhalten.