meldestelle/docs/06_Frontend/README.md
Stefan Mogeritsch 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

48 lines
2.7 KiB
Markdown

---
type: Reference
status: ACTIVE
owner: Frontend Expert
last_update: 2026-01-15
---
# Frontend-Architektur "Meldestelle Portal"
Dieses Verzeichnis dokumentiert die Architektur und die technischen Details des KMP-Frontends "Meldestelle Portal".
## Übersicht
Das Frontend ist eine **Kotlin Multiplatform (KMP)**-Anwendung, die für die folgenden Ziele entwickelt wird:
* **Desktop (JVM):** Eine eigenständige Desktop-Anwendung.
* **Web (JS/Wasm):** Eine moderne Web-Anwendung, die im Browser läuft.
Die Architektur ist auf **Offline-Fähigkeit** und eine reaktive UI ausgelegt.
## Modul-Struktur
Das `frontend`-Verzeichnis ist wie folgt strukturiert, um eine klare Trennung der Verantwortlichkeiten zu gewährleisten:
* `shells/`: Die ausführbaren Anwendungen (Assembler-Module), die die App für eine bestimmte Plattform (Desktop, Web) zusammenbauen.
* `features/`: Vertikale Slices der Anwendung. Jedes Feature-Modul kapselt eine bestimmte Funktionalität (z.B. `auth-feature`, `ping-feature`). Wichtig: Ein Feature-Modul darf niemals von einem anderen Feature-Modul abhängen.
* `core/`: Gemeinsame Basis-Module, die von allen Features genutzt werden. Dazu gehören:
* `design-system/`: Compose-Komponenten, Themes, Farben.
* `domain/`: Fachliche Kernlogik und Datenmodelle des Frontends.
* `local-db/`: SQLDelight-Datenbank-Setup und Queries.
* `navigation/`: Navigations-Logik und Routen-Definitionen.
* `network/`: Ktor-Client und API-Definitionen.
## Kerntechnologien
* **UI:** [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform/) für eine deklarative, plattformübergreifende UI.
* **Persistenz (Offline-First):** [SQLDelight](https://cashapp.github.io/sqldelight/) für die lokale Speicherung von Daten.
* **State Management:** Kotlin Coroutines und Flow in Kombination mit ViewModels.
* **Dependency Injection:** [Koin](https://insert-koin.io/) für die lose Kopplung von Komponenten.
* **Netzwerk:** [Ktor Client](https://ktor.io/docs/client-introduction.html) für die Kommunikation mit dem Backend.
## Wichtige Dokumente
* **[State-Management Strategie (UDF)](state-management-strategy.md):** Beschreibt die empfohlene Strategie für komplexe Screens.
* **[ADR-0010: SQLDelight für Cross-Platform-Persistenz](../01_Architecture/adr/0010-sqldelight-for-cross-platform-persistence.md):** Beschreibt die Entscheidung für SQLDelight.
* **[ADR-0011: Koin für Dependency Injection](../01_Architecture/adr/0011-koin-for-dependency-injection.md):** Beschreibt die Entscheidung für Koin.
* **[Offline-First-Architektur](offline-first-architecture.md):** Detaillierte Beschreibung der Offline-First-Strategie.
* **[Web-Setup (Webpack & Worker)](web-setup.md):** Details zur Konfiguration des Web-Targets.