Skip to content

Datenbank-Architektur

Die Anwendung speichert Acceptance-Daten lokal über Dexie in IndexedDB. Persistierte Entities werden einmal in der Schema-Registry definiert und anschließend für Dexie-Tabellen, Helper und Store-Wiring wiederverwendet.

Quelle der Wahrheit

Die Quelle der Wahrheit für persistierte Entities ist:

  • app/schemas/*.ts
  • app/schemas/entities.ts

Jede Entity-Definition enthält:

  • Schema
  • Factory für leere Einträge
  • Tabellenname
  • Dexie-Schema-Generierung

Entity-Registry

app/schemas/entities.ts exports ENTITIES, which currently registers:

  • meter
  • key
  • room
  • contractPartner
  • bank_details
  • other_remarks
  • object_equipment
  • signature
  • roomDetail
  • buildingModification
  • tenant_confirmation
  • termination_reason

Die Registry wird verwendet, um:

  • die Dexie-Tabellenkonfiguration abzuleiten
  • Store-IDs zu erkennen, die vom Dexie-Sync-Plugin behandelt werden
  • Entity-Helper zu erzeugen

Strukturdiagramm

Dexie-Datenbank

app/db/index.ts definiert AcceptanceDB mit dem Datenbanknamen acceptance-db.

Aktuelle Version: 30

Tabellen:

  • acceptances
  • one table per entity in ENTITIES
  • dirtyFlags
  • images
  • pdfUploads
  • pdfChunks
  • setups

Der ready-Hook der DB prüft, ob jede Entity-Tabelle aus der Registry existiert. Fehlende Tabellen erzeugen eine Runtime-Fehlermeldung mit Verweis auf app/db/index.ts.

Speicherung der Root-Acceptance

Der Header-Datensatz der Acceptance wird getrennt von den Entity-Collections gespeichert.

  • toAcceptanceDB() entfernt eingebettete Child-Collections vor dem Persistieren der Root-Acceptance
  • saveAcceptanceEntities() speichert Child-Collections mit acceptanceId
  • hydrateAcceptance() lädt den Root-Datensatz und setzt alle Child-Collections über die Entity-Helper wieder zusammen

Dadurch bleibt das Dexie-Layout an den Entity-Stores ausgerichtet, während die Anwendung trotzdem mit einer vollständig hydratisierten Acceptance arbeiten kann.

Helper-Ebenen

app/db/index.ts exports several helper groups:

  • allHelpers: generated entity helpers
  • imageHelpers: image-table helpers
  • pdfUploadHelpers: chunked PDF upload helpers
  • setupHelpers: setup cache helpers
  • dirtyHelpers: dirty-flag helpers
  • acceptanceHelpers: acceptance-level CRUD and export helpers

Setup-Cache

Die Tabelle setups ist ein Key-Value-Store für das letzte Setup-Payload.

  • feste Record-ID: global
  • Speicherung zusammen mit updatedAt
  • wird von useSetupStore() als Offline-Fallback genutzt

Bereinigungsoperationen

app/db/index.ts definiert außerdem app-weite Bereinigungshelfer.

  • clearAllData(): leert Acceptances, Entity-Tabellen, Dirty-Flags, Bilder, PDF-Upload-Tabellen und den Setup-Cache
  • deleteDatabase(): entfernt die komplette Dexie-Datenbank
  • clearAcceptanceData(acceptanceId): leert Entity-Zeilen, Dirty-Flags und Bilder für eine einzelne Acceptance