Files
meldestelle/docs/99_Journal/2026-01-28_Session_Log.md
T
stefan fd7eba3589 docs: add state-management strategy reference and SQLDelight session log
Added documentation outlining the recommended frontend state-management approach using Unidirectional Data Flow (UDF). Documented the 2026-01-28 session addressing the critical SQLDelight async issue, detailing the analysis, fix implementation, and results. Updated PingEventRepositoryImpl to use `awaitAsOneOrNull` for proper async handling.
2026-01-28 13:00:55 +01:00

2.1 KiB

type, status, owner, date, participants
type status owner date participants
Journal COMPLETED Curator 2026-01-28
Lead Architect
Frontend Expert

Session Log: 28. Jänner 2026 - Lösung des SQLDelight-Sync-Problems

Zielsetzung

Systematische Analyse und Behebung des kritischen SQLDelight-Bugs in der Web-App (JS/Wasm), der einen echten Delta-Sync verhinderte.

Durchgeführte Arbeiten

1. Analyse & Fehlerreproduktion

  • Ausgangslage: Der PingEventRepositoryImpl enthielt einen Workaround, der getLatestSince() immer null zurückgeben ließ, um einen Full-Sync zu erzwingen.
  • Reproduktion: Der Workaround wurde entfernt und durch den ursprünglichen Code (db.appDatabaseQueries.selectLatestPingEventId().executeAsOneOrNull()) ersetzt.
  • Ergebnis: Der Fehler The driver used with SQLDelight is asynchronous... wurde wie erwartet in der Browser-Konsole reproduziert.

2. Systematische Ursachenforschung

  • Hypothese 1 (Konfiguration): Die Build-Konfiguration (frontend/core/local-db/build.gradle.kts) wurde überprüft. generateAsync.set(true) war korrekt gesetzt. Die Fehlermeldung war also eine falsche Fährte.
  • Hypothese 2 (API-Nutzung): Die Analyse ergab, dass .executeAsOneOrNull() eine blockierende API ist, die mit dem asynchronen Web-Worker-Treiber in Konflikt steht.
  • Lösung: Die korrekte, nicht-blockierende API aus der SQLDelight-Coroutines-Erweiterung muss verwendet werden.

3. Implementierung des Fixes

  • Der Aufruf in PingEventRepositoryImpl wurde von executeAsOneOrNull() auf awaitAsOneOrNull() geändert.
  • Der korrekte Import-Pfad app.cash.sqldelight.async.coroutines.awaitAsOneOrNull wurde hinzugefügt.

Ergebnis & Status

  • Erfolg: Das SQLDelight-Sync-Problem ist gelöst.
  • Die Web-App führt nun einen korrekten Delta-Sync durch, was durch den Aufruf des /api/ping/sync?since=... Endpunkts im Netzwerk-Log bestätigt wurde.
  • Die wichtigste technische Schuld im Frontend wurde beseitigt.

Nächste Schritte (Diskutiert)

  • Docker-Integration: Das Frontend (Build & Deployment) soll in die bestehende Docker-Konstruktion des Projekts integriert werden.