### feat: erweitere ZNS und SQLDelight-Integration
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Has been cancelled

- **SQLDelight:** Füge neue Queries (`countVereine`, `maxUpdated...`) zur SQLite-Datenbank hinzu und aktualisiere `DesktopMasterdataRepository`.
- **ZNS-Sync:** Passe `ZnsImportState` an, um Pferde- und Funktionärsdaten zu unterstützen.
- **Cloud-Sync:** Entferne redundante Auth-Header und setze Limits für Massensynchronisation auf 50.000 Datensätze.
- **Masterdata-Service:** Stabilisiere Consul Health-Checks und implementiere Limit-Beschränkungen auf Controller-Ebene.
This commit is contained in:
2026-04-22 14:14:33 +02:00
parent 98c241fc64
commit beb20e0cf7
16 changed files with 287 additions and 99 deletions
@@ -1,18 +1,24 @@
package at.mocode.frontend.features.pferde.data
import at.mocode.frontend.core.network.ApiRoutes
import at.mocode.frontend.features.pferde.domain.Pferd
import at.mocode.frontend.features.pferde.domain.PferdRepository
import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.request.*
import io.ktor.http.*
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
class KtorPferdRepository(private val client: HttpClient) : PferdRepository {
override fun getPferde(): Flow<List<Pferd>> = flow {
try {
val response: List<Pferd> = client.get("/api/v1/masterdata/pferde").body()
emit(response)
val response = client.get(ApiRoutes.Masterdata.PFERDE)
if (response.status.isSuccess()) {
emit(response.body())
} else {
emit(emptyList())
}
} catch (_: Exception) {
emit(emptyList())
}
@@ -20,9 +26,10 @@ class KtorPferdRepository(private val client: HttpClient) : PferdRepository {
override suspend fun searchPferde(query: String): List<Pferd> {
return try {
client.get("/api/v1/masterdata/pferde/search") {
val response = client.get("${ApiRoutes.Masterdata.PFERDE}/search") {
parameter("q", query)
}.body()
}
if (response.status.isSuccess()) response.body() else emptyList()
} catch (_: Exception) {
emptyList()
}
@@ -30,14 +37,16 @@ class KtorPferdRepository(private val client: HttpClient) : PferdRepository {
override suspend fun getPferdById(id: String): Pferd? {
return try {
client.get("/api/v1/masterdata/pferde/$id").body()
val response = client.get("${ApiRoutes.Masterdata.PFERDE}/$id")
if (response.status.isSuccess()) response.body() else null
} catch (_: Exception) {
null
}
}
override suspend fun savePferd(pferd: Pferd) {
client.post("/api/v1/masterdata/pferde") {
client.post(ApiRoutes.Masterdata.PFERDE) {
contentType(ContentType.Application.Json)
setBody(pferd)
}
}