fixing(client)
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
# 🖥️ 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 Desktop‐Build 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
|
||||
|
||||
```bash
|
||||
# Im Projekt-Root
|
||||
./gradlew :client:runJvm
|
||||
```
|
||||
Die App startet als eigenständiges JVM-Fenster auf Ihrem Desktop.
|
||||
|
||||
### 2.2 Web-App starten
|
||||
|
||||
```bash
|
||||
./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.
|
||||
Reference in New Issue
Block a user