meldestelle/client/ClientModuleDocumentation.md
2025-08-13 00:15:32 +02:00

4.2 KiB
Raw Blame History

🖥️ Client-Modul

Dieses Modul liefert die grafische Benutzeroberfläche für das Projekt einmal als Desktop-App (JVM) und einmal als Web-App (JavaScript). Dank Kotlin Multiplatform + Compose Multiplatform teilt sich beides eine gemeinsame Code-Basis.


1. Voraussetzungen

Tool Empfohlene Version Bemerkung
JDK 21 (Temurin) Für DesktopBuild und Gradle
Node.js & npm ≥ 20 Nur für den JS-/Browser-Build
Gradle Wrapper Wird mitgeliefert ./gradlew ruft immer die projektinterne Version auf

2. Build & Run

2.1 Desktop-App starten

# Im Projekt-Root
./gradlew :client:runJvm

Die App startet als eigenständiges JVM-Fenster auf Ihrem Desktop.

2.2 Web-App starten

./gradlew :client:jsBrowserDevelopmentRun
  1. Gradle kompiliert das JS-Artefakt.
  2. Anschließend öffnet sich ein lokaler Dev-Server (Standard: http://localhost:3000).

Hot-Reload wird vom Compose-/Ktor-Dev-Server automatisch gehandhabt.


3. Packaging

Ziel Task (Gradle) Ergebnis
Desktop :client:packageJvm Self-contained Verzeichnis mit Start-Skript
Web (prod) :client:jsBrowserProductionWebpack Optimiertes Bundle in build/dist

4. Architekturüberblick

client
  commonMain
    ├─ UI: Compose Runtime/Foundation/Material³
    ├─ Netzwerk: Ktor Client (+ JSON Serialisierung)
    └─ Geschäftslogik & Models
  jvmMain
    └─ Ktor CIO Engine (Desktop)
  jsMain
    └─ Ktor JS Engine (Browser)

Gemeinsame Logik (UI-State, Repository-Klassen etc.) lebt in commonMain. Plattform-spezifisch ist im Wesentlichen nur der gewählte Ktor-Engine.


5. API-Kommunikation

Alle Aufrufe an das Backend erfolgen asynchron via Ktor Client. Das JSON-Serialisieren übernimmt kotlinx.serialization.

Beispiel (vereinfacht):

kotlin val client = HttpClient(CIO) { install(ContentNegotiation) { json() } } suspend fun ping(): PingResponse = client.get("$BASE_URL/ping").body()


6. Konfiguration

Schlüssel Zweck Standardwert
BASE_URL (env / props) Root-URL des Gateways http://localhost:8080
LOG_LEVEL (env / props) Logging (DEBUG/INFO/…) INFO

Konfiguration kann via JVM-Args (-D) oder Umgebungsvariablen überschrieben werden.


7. Tests

Noch keine UI-Tests enthalten. Empfohlen: Compose UI Testing (Desktop) und Kotlin/Wrappers Testing (JS).


8. Häufige Gradle-Tasks

Zweck Task
Desktop-App starten (Dev) ./gradlew :client:runJvm
Web-App starten (Dev) ./gradlew :client:jsBrowserDevelopmentRun
Desktop-Artefakt packen ./gradlew :client:packageJvm
Web-Artefakt für Prod erstellen ./gradlew :client:jsBrowserProductionWebpack
Alle Tests ausführen ./gradlew :client:test
Abhängigkeits-Updates anzeigen ./gradlew :client:dependencyUpdates

9. Troubleshooting

Problem Lösungsvorschlag
Weißer Bildschirm im Browser Dev-Konsole öffnen (F12) → Netzwerk-Fehler? CORS-Header prüfen
java.lang.UnsatisfiedLinkError Prüfen, ob das korrekte JDK (21) verwendet wird
Gradle-Timeout beim NPM-Install Proxy-/Firewall-Settings überprüfen; ggf. --network=host

10. Lizenz

TODO: <Lizenzname> bitte anpassen.