### 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
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:
+15
-11
@@ -19,6 +19,7 @@ class DesktopMasterdataRepository(
|
||||
private val queries = db.meldestelleDbQueries
|
||||
|
||||
override fun saveVereine(vereine: List<ZnsRemoteVerein>) {
|
||||
if (vereine.isEmpty()) return
|
||||
println("[Repository] Speichere ${vereine.size} Vereine in SQLite")
|
||||
val now = System.currentTimeMillis()
|
||||
runBlocking {
|
||||
@@ -30,7 +31,7 @@ class DesktopMasterdataRepository(
|
||||
oebs_nummer = remote.oepsNummer,
|
||||
name = remote.name,
|
||||
ort = remote.ort,
|
||||
plz = null, // Falls vom Backend geliefert, hier mappen
|
||||
plz = null,
|
||||
bundesland = remote.bundesland,
|
||||
is_active = 1,
|
||||
last_updated = now
|
||||
@@ -55,6 +56,7 @@ class DesktopMasterdataRepository(
|
||||
}
|
||||
|
||||
override fun saveReiter(reiter: List<ZnsRemoteReiter>) {
|
||||
if (reiter.isEmpty()) return
|
||||
println("[Repository] Speichere ${reiter.size} Reiter in SQLite")
|
||||
val now = System.currentTimeMillis()
|
||||
runBlocking {
|
||||
@@ -66,7 +68,7 @@ class DesktopMasterdataRepository(
|
||||
zns_nummer = remote.satznummer,
|
||||
vorname = remote.vorname,
|
||||
nachname = remote.nachname,
|
||||
jahrgang = null, // Backend liefert aktuell kein Jahrgang direkt in ZnsRemoteReiter?
|
||||
jahrgang = null,
|
||||
geschlecht = null,
|
||||
nation = remote.nation ?: "AUT",
|
||||
is_active = 1,
|
||||
@@ -94,6 +96,7 @@ class DesktopMasterdataRepository(
|
||||
}
|
||||
|
||||
override fun savePferde(pferde: List<ZnsRemotePferd>) {
|
||||
if (pferde.isEmpty()) return
|
||||
println("[Repository] Speichere ${pferde.size} Pferde in SQLite")
|
||||
val now = System.currentTimeMillis()
|
||||
runBlocking {
|
||||
@@ -130,6 +133,7 @@ class DesktopMasterdataRepository(
|
||||
}
|
||||
|
||||
override fun saveFunktionaere(funktionaere: List<ZnsRemoteFunktionaer>) {
|
||||
if (funktionaere.isEmpty()) return
|
||||
println("[Repository] Speichere ${funktionaere.size} Funktionäre in SQLite")
|
||||
val now = System.currentTimeMillis()
|
||||
runBlocking {
|
||||
@@ -169,20 +173,20 @@ class DesktopMasterdataRepository(
|
||||
}
|
||||
|
||||
override fun getStats(): MasterdataStats {
|
||||
val vereinCount = queries.selectAllVereine().executeAsList().size.toLong()
|
||||
val reiterCount = queries.selectAllReiter().executeAsList().size.toLong()
|
||||
val pferdCount = queries.selectAllPferde().executeAsList().size.toLong()
|
||||
val funktionaerCount = queries.selectAllFunktionaere().executeAsList().size.toLong()
|
||||
val vereinCount = queries.countVereine().executeAsOne()
|
||||
val reiterCount = queries.countReiter().executeAsOne()
|
||||
val pferdCount = queries.countPferde().executeAsOne()
|
||||
val funktionaerCount = queries.countFunktionaere().executeAsOne()
|
||||
|
||||
val lastUpdate = listOf(
|
||||
queries.selectAllVereine().executeAsList().maxOfOrNull { it.last_updated } ?: 0L,
|
||||
queries.selectAllReiter().executeAsList().maxOfOrNull { it.last_updated } ?: 0L,
|
||||
queries.selectAllPferde().executeAsList().maxOfOrNull { it.last_updated } ?: 0L,
|
||||
queries.selectAllFunktionaere().executeAsList().maxOfOrNull { it.last_updated } ?: 0L
|
||||
queries.maxUpdatedVerein().executeAsOne().MAX ?: 0L,
|
||||
queries.maxUpdatedReiter().executeAsOne().MAX ?: 0L,
|
||||
queries.maxUpdatedPferd().executeAsOne().MAX ?: 0L,
|
||||
queries.maxUpdatedFunktionaer().executeAsOne().MAX ?: 0L
|
||||
).maxOrNull() ?: 0L
|
||||
|
||||
val lastImportStr = if (lastUpdate > 0) {
|
||||
val dt = LocalDateTime.now() // Vereinfacht, idealerweise aus lastUpdate-Zeitstempeln
|
||||
val dt = LocalDateTime.ofInstant(java.time.Instant.ofEpochMilli(lastUpdate), java.time.ZoneId.systemDefault())
|
||||
dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))
|
||||
} else "Nie"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user