Replaced Room with SQLDelight for improved multiplatform support, enabling JavaScript and WebAssembly targets. Added custom database driver implementations for JVM, JS, and WASM. Updated Gradle configurations, dependencies, and project structure accordingly.
4.3 KiB
Frontend Status Report & Architecture Update
Datum: 08.01.2026 Von: Senior Frontend Developer (KMP/Compose) An: Lead Software Architect
1. Executive Summary
Das Frontend-System ("Meldestelle Portal") wurde erfolgreich auf eine moderne, zukunftssichere Kotlin Multiplatform (KMP) Architektur migriert, die echte Offline-Fähigkeit im Web (via Wasm/JS) und Desktop (JVM) unterstützt.
Kritische Blockaden im Build-System (Room-Inkompatibilität mit JS) wurden durch einen strategischen Wechsel zu SQLDelight gelöst. Das Dependency-Management wurde zentralisiert und bereinigt.
Status: Frontend-Build ist stabil (nach Fixes in core-utils). Backend-Anpassungen sind erforderlich.
2. Durchgeführte Maßnahmen
2.1 Architektur & Persistenz (Offline-First)
- Problem: Die ursprünglich geplante Nutzung von Room erwies sich als Blocker für die Web-Targets (JS/Wasm), da Room derzeit nur JVM/Android/Native unterstützt.
- Lösung: Migration zu SQLDelight 2.2.1.
- Ermöglicht echte Cross-Platform-Persistenz.
- Web (JS/Wasm): Nutzung von
WebWorkerDriverin Kombination mit OPFS (Origin Private File System) für performante, persistente Speicherung im Browser. - Desktop (JVM): Nutzung von
JdbcSqliteDrivermit Java 25 Virtual Threads für nicht-blockierende I/O. - Async-First: Die Datenbank-Schnittstellen wurden auf
suspend(asynchron) umgestellt (generateAsync = true), um die strikten Anforderungen des Browsers zu erfüllen.
2.2 Build-System & Dependency Management
- Single Source of Truth: Die
libs.versions.tomlwurde komplett refaktoriert.- Klare Trennung zwischen Frontend (KMP) und Backend (Spring/Infra) Dependencies.
- Einführung von Bundles (
kmp-common,ktor-client-common,compose-common) zur massiven Reduktion von Boilerplate in denbuild.gradle.ktsDateien.
- Wasm-Support: Fehlende Plattform-Konfigurationen (
PlatformConfig.wasmJs.kt) wurden ergänzt. - Bereinigung: Veraltete und nicht genutzte Dependencies wurden entfernt.
2.3 Infrastruktur & Web-Integration
- Webpack Konfiguration: Hinzufügen von
opfs-headers.js, um die notwendigen HTTP-Header (Cross-Origin-Opener-Policy,Cross-Origin-Embedder-Policy) fürSharedArrayBufferund OPFS im Dev-Server zu setzen. - Web Worker: Implementierung eines Custom Workers (
sqlite.worker.js), der die Datenbank im Hintergrund-Thread verwaltet.
3. Auswirkungen auf das Backend & Core (Action Required)
Während der Frontend-Optimierung wurden Inkonsistenzen im Shared-Code (core:core-utils) aufgedeckt, die das Backend betreffen.
3.1 core:core-utils Kontamination
- Problem: Das Modul
core:core-utilsist als KMP-Modul konfiguriert, enthielt aber JVM-spezifischen Code für Exposed (JDBC-basiertes ORM), der im Frontend (JS/Wasm) nicht kompilierbar ist. - Temporäre Lösung: Die Datei
DatabaseUtils.kt(Exposed-Helper) wurde auskommentiert, um den Frontend-Build zu retten. - TODO Backend:
- Prüfen, ob
DatabaseUtils.ktim Backend essenziell ist. - Falls ja: Verschieben in ein reines Backend-Modul (z.B.
:backend:commonoder:backend:infrastructure:persistence). core:core-utilsmuss "rein" bleiben (nur KMP-kompatibler Code), wenn es vom Frontend konsumiert werden soll.
- Prüfen, ob
3.2 API-Verträge
- Durch den Wechsel auf SQLDelight und die Async-First Architektur im Frontend ändert sich nichts an der REST-API, aber die Erwartungshaltung an die Synchronisation (Sync-Logik) wird wichtiger.
4. Nächste Schritte (Frontend Roadmap)
- Navigation: Implementierung einer robusten Navigationslösung (Type-Safe, Deep-Linking-fähig), die sowohl Desktop als auch Web (Browser-History) sauber bedient.
- Sync-Logik: Implementierung des Datenaustauschs zwischen lokaler SQLDelight-DB und Backend-APIs (Offline-Sync).
- UI-Integration: Anbindung der neuen asynchronen Datenbank-Repositories an die Compose-ViewModels (
Flow->State).
Empfehlung an Lead Architect:
Bitte weisen Sie den Senior Backend Developer an, das Modul core:core-utils zu bereinigen und die auskommentierte Datenbank-Logik in ein geeignetes Backend-Modul zu migrieren. Das Frontend ist nun stabil und bereit für die Feature-Entwicklung.