App: Ktor-Client & Sync-Repository #44

Closed
opened 2026-05-14 17:28:50 +00:00 by jreinemann-euris · 1 comment
jreinemann-euris commented 2026-05-14 17:28:50 +00:00 (Migrated from github.com)

Feature: REST-Client und Sync-Repository in der Android-App

Part of: #11
Depends on: #43, #39

Ziel

Die Android-App kann ueber einen HTTP-Client mit dem Ktor-Server kommunizieren und das Inventar synchronisieren.

Scope

  • Ktor-Client-Dependencies in :app hinzufuegen (ktor-client-core, ktor-client-okhttp, ktor-client-content-negotiation, ktor-serialization-kotlinx-json)
  • SyncService Interface definieren (Domain-Layer)
  • SyncServiceImpl implementieren (Data-Layer): GET/PUT Inventar
  • Hilt-Modul fuer SyncService DI
  • Netzwerk-Fehlerbehandlung (Timeout, Connection Error, Auth Error)
  • Server-URL und API-Key aus Settings lesen

Technische Hinweise

  • Ktor Client mit OkHttp-Engine (Android-optimiert)
  • Shared-DTOs (InventoryDto) als Request/Response-Body
  • Mapping: Room-Entities <-> Shared-DTOs (existiert bereits teilweise in ImportExportRepository)
  • withContext(Dispatchers.IO) fuer Netzwerk-Calls
  • Bestehende ImportExportRepository als Referenz fuer Entity-Mapping

Akzeptanzkriterien

  • SyncService kann Inventar vom Server laden (GET)
  • SyncService kann Inventar zum Server hochladen (PUT)
  • Netzwerkfehler werden sauber als Result<> zurueckgegeben
  • Auth-Fehler (401) werden erkannt und spezifisch behandelt
  • Tests: SyncService-Tests mit Mock-Server
## Feature: REST-Client und Sync-Repository in der Android-App Part of: #11 Depends on: #43, #39 ### Ziel Die Android-App kann ueber einen HTTP-Client mit dem Ktor-Server kommunizieren und das Inventar synchronisieren. ### Scope - Ktor-Client-Dependencies in `:app` hinzufuegen (ktor-client-core, ktor-client-okhttp, ktor-client-content-negotiation, ktor-serialization-kotlinx-json) - `SyncService` Interface definieren (Domain-Layer) - `SyncServiceImpl` implementieren (Data-Layer): GET/PUT Inventar - Hilt-Modul fuer SyncService DI - Netzwerk-Fehlerbehandlung (Timeout, Connection Error, Auth Error) - Server-URL und API-Key aus Settings lesen ### Technische Hinweise - Ktor Client mit OkHttp-Engine (Android-optimiert) - Shared-DTOs (`InventoryDto`) als Request/Response-Body - Mapping: Room-Entities <-> Shared-DTOs (existiert bereits teilweise in ImportExportRepository) - `withContext(Dispatchers.IO)` fuer Netzwerk-Calls - Bestehende `ImportExportRepository` als Referenz fuer Entity-Mapping ### Akzeptanzkriterien - [ ] `SyncService` kann Inventar vom Server laden (GET) - [ ] `SyncService` kann Inventar zum Server hochladen (PUT) - [ ] Netzwerkfehler werden sauber als Result<> zurueckgegeben - [ ] Auth-Fehler (401) werden erkannt und spezifisch behandelt - [ ] Tests: SyncService-Tests mit Mock-Server
jreinemann-euris commented 2026-05-14 19:14:51 +00:00 (Migrated from github.com)

Abgeschlossen (2026-05-14)

Zyklen: 1 (1 Testfix: ItemDto-Parameter)
Tests: 9 Tests, 0 Fehler

Implementierte Artefakte

  • SyncError.kt: Sealed class mit 6 Fehlertypen (ConnectionError, Timeout, AuthError, ServerError, NotConfigured, Unknown)
  • SyncService.kt: Domain-Interface mit downloadInventory() und uploadInventory()
  • SyncServiceImpl.kt: Ktor-Client-Implementierung mit OkHttp-Engine, X-API-Key-Auth, Settings-basierte Konfiguration
  • NetworkModule.kt: Hilt-Modul für HttpClient (Singleton) und SyncService-Binding
  • AndroidManifest.xml: INTERNET-Permission
  • libs.versions.toml + build.gradle.kts: Ktor-Client-Dependencies
  • SyncServiceImplTest.kt: 9 Tests mit MockEngine (GET/PUT, Auth, Server-Fehler, Config-Fehler)

Abweichungen

Keine

## Abgeschlossen (2026-05-14) **Zyklen:** 1 (1 Testfix: ItemDto-Parameter) **Tests:** ✅ 9 Tests, 0 Fehler ### Implementierte Artefakte - ✅ SyncError.kt: Sealed class mit 6 Fehlertypen (ConnectionError, Timeout, AuthError, ServerError, NotConfigured, Unknown) - ✅ SyncService.kt: Domain-Interface mit downloadInventory() und uploadInventory() - ✅ SyncServiceImpl.kt: Ktor-Client-Implementierung mit OkHttp-Engine, X-API-Key-Auth, Settings-basierte Konfiguration - ✅ NetworkModule.kt: Hilt-Modul für HttpClient (Singleton) und SyncService-Binding - ✅ AndroidManifest.xml: INTERNET-Permission - ✅ libs.versions.toml + build.gradle.kts: Ktor-Client-Dependencies - ✅ SyncServiceImplTest.kt: 9 Tests mit MockEngine (GET/PUT, Auth, Server-Fehler, Config-Fehler) ### Abweichungen Keine
Sign in to join this conversation.
No description provided.