### feat: implementiere SQLite-Integration und Repository-Refactoring
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Failing after 58s
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Successful in 6m0s
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Successful in 6m10s
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Failing after 2m0s
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Successful in 1m55s

- Erstelle Persistenz-Layer mit SQLite-Tabellen für `Verein` und `Reiter` inkl. Queries.
- Entferne Mock-Daten in `ReiterViewModel` und nutze Repository-Injektion.
- Integriere neue Tabellen und Queries im `DesktopMasterdataRepository`.
- Erweitere `VeranstalterWizardViewModel` um lokale Suche mit SQLite-Queries.
- Harmonisiere Feldnamen (`remoteReiterResults`) über alle Module hinweg.
- Aktualisiere DI-Module (`VeranstalterModule`, `ReiterModule`, `DesktopModule`) mit SQLite-Injektionen.
- Refaktor UI-Komponenten und Screens (`ReiterScreen`, `StammdatenImportScreen`) mit neuer Logik.
This commit is contained in:
2026-04-22 02:20:51 +02:00
parent f18b002f4e
commit e0b1ce8836
22 changed files with 301 additions and 73 deletions
@@ -11,7 +11,7 @@ data class ZnsImportState(
val errorMessage: String? = null,
val isFinished: Boolean = false,
val remoteResults: List<ZnsRemoteVerein> = emptyList(),
val remoteReiter: List<ZnsRemoteReiter> = emptyList(),
val remoteReiterResults: List<ZnsRemoteReiter> = emptyList(),
val isSearching: Boolean = false,
val lastSyncVersion: String? = null,
val isSyncing: Boolean = false,
@@ -39,3 +39,59 @@ UPDATE SyncEvents SET synced_at = ? WHERE origin_node_id = ? AND sequence_number
getLastSequenceNumber:
SELECT MAX(sequence_number) FROM SyncEvents WHERE origin_node_id = ?;
-- Stammdaten Tabellen
CREATE TABLE LocalVerein (
id INTEGER NOT NULL PRIMARY KEY, -- OEBS Nummer oder interne ID
oebs_nummer TEXT NOT NULL,
name TEXT NOT NULL,
ort TEXT,
plz TEXT,
bundesland TEXT,
is_active INTEGER NOT NULL DEFAULT 1,
last_updated INTEGER NOT NULL
);
CREATE TABLE LocalReiter (
id INTEGER NOT NULL PRIMARY KEY,
zns_nummer TEXT,
vorname TEXT NOT NULL,
nachname TEXT NOT NULL,
jahrgang INTEGER,
geschlecht TEXT,
nation TEXT,
is_active INTEGER NOT NULL DEFAULT 1,
last_updated INTEGER NOT NULL
);
-- Verein Queries
upsertVerein:
INSERT OR REPLACE INTO LocalVerein(id, oebs_nummer, name, ort, plz, bundesland, is_active, last_updated)
VALUES (?, ?, ?, ?, ?, ?, ?, ?);
selectAllVereine:
SELECT * FROM LocalVerein ORDER BY name ASC;
searchVereine:
SELECT * FROM LocalVerein
WHERE name LIKE ('%' || ? || '%') OR oebs_nummer LIKE ('%' || ? || '%')
ORDER BY name ASC;
-- Reiter Queries
upsertReiter:
INSERT OR REPLACE INTO LocalReiter(id, zns_nummer, vorname, nachname, jahrgang, geschlecht, nation, is_active, last_updated)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
selectAllReiter:
SELECT * FROM LocalReiter ORDER BY nachname ASC, vorname ASC;
searchReiter:
SELECT * FROM LocalReiter
WHERE nachname LIKE ('%' || ? || '%') OR vorname LIKE ('%' || ? || '%') OR zns_nummer LIKE ('%' || ? || '%')
ORDER BY nachname ASC, vorname ASC;
deleteAllVereine:
DELETE FROM LocalVerein;
deleteAllReiter:
DELETE FROM LocalReiter;