7.1 KiB
7.1 KiB
🎨 [Frontend Expert] — Zwischenstand & Roadmap
Stand: 12. April 2026 Rolle: KMP, Compose Desktop, State-Management, Navigation, Backend-Anbindung
✅ Erledigte Sprints
Sprint A — Abgeschlossen
-
A-1 | ViewModel-Architektur definieren & Referenz-Implementierung
- MVVM mit UDF als verbindliches Muster festgelegt
Intent/State-Struktur definiert (Sealed Classes)VeranstalterViewModelals vollständige Referenz-Implementierung- Muster-Dokument in
docs/06_Frontend/abgelegt
-
A-2 | Abteilungs-Logik im Bewerb-Dialog
- CSN-C-NEU: Automatischer Vorschlag der Pflicht-Teilung mit 4 Abteilungen
- AssistChip „Pflicht-Teilung vorgeschlagen" bei erkanntem Typ
- Abteilungs-Typen
SEPARATE_SIEGEREHRUNG/ORGANISATORISCHin UI
Sprint B (Teilweise) — Abgeschlossene Punkte
- B-1 | ViewModels für alle V3-Screens
TurnierViewModel,BewerbViewModel,PferdProfilViewModelReiterProfilViewModel,VereinsViewModel,FunktionaerViewModelAbteilungViewModel(Startliste, Ergebnisse)
Zusätzlich erledigt (Session 02.04.2026)
- Navigation V2 / Back-Stack-System implementiert
- Profil-Cards mit Edit-Dialog (Veranstalter, Pferd, Reiter, Verein, Funktionär)
- Onboarding: State-Lift via
rememberSaveable(Gerätename, Sicherheitsschlüssel) - Veranstaltungs-Wizard: Bestätigungs-Dialog mit Daten-Vorschau vor finalem Anlegen
- Breadcrumbs und Zurück-Navigation korrigiert
🔴 Sprint B — Offen (höchste Priorität)
-
B-2 | Ktor-Clients & Repositories für Backend-Anbindung
HttpClient-Factory zentral konfiguriert (Auth, Timeout, JSON, Logging, Retry)VeranstalterRepository(Interface + Default-Impl mit Ktor) vollständigTurnierRepositoryInterface in commonMain vorbereitet- Fehler-Mapping HTTP → Domain-Errors einheitlich (
DomainErrors.ktincore.network) BewerbRepositoryInterface +DefaultBewerbRepository(Ktor) angelegtAbteilungRepositoryInterface +DefaultAbteilungRepository(Ktor) angelegtDefaultTurnierRepository(Ktor) angelegt- DTOs (
TurnierDto,BewerbDto,AbteilungDto) + Mapper in commonMain - Koin Feature-Modul
turnierFeatureModule: alle 3 Repositories + ViewModels gebunden - Turnier/Bewerb/Abteilung Backend-Endpunkte verdrahtet (via
ApiRoutes) AuthApiClient-Integration: Token-Provider injizierbarStoreV2schrittweise ablösen (Feature-für-Feature, ToggleuseRealBackend)- Akzeptanz-Tests per Fake-Server (Mock Engine, happy + error paths)
- Dokumentation
docs/06_Frontend/Networking.md
-
B-3 | Validierungs-Live-Feedback in Edit-Dialogen
MsValidationWrappervorhanden:Error/Warning/Infomit Icon + FarbeisValidinReiterProfilViewModel+PferdProfilViewModelfür Speichern-Button- OEPS-Nummer: Live-Validierung beim Tippen (ReiterProfilViewModel, PferdProfilViewModel)
- FEI-ID: Live-Validierung beim Tippen (ReiterProfilViewModel, PferdProfilViewModel)
- Lizenzklasse: Live-Validierung beim Tippen (ReiterProfilViewModel)
ReiterProfilEditDialogmitMsValidationWrapper+isError+enabled=state.isValidPferdProfilEditDialogmitMsValidationWrapper+isError+enabled=state.isValidValidationResult.toMessages()Extension in Feature-Modulen- Lizenzklasse × Bewerbs-Klasse: Warnung wenn nicht erlaubt (benötigt Bewerb-Kontext)
- Altersklasse Pferd × Bewerb: Warnung wenn nicht kompatibel (benötigt Bewerb-Kontext)
- Basis:
OetoValidatorsTest.kt-Grenzfälle als Akzeptanzkriterien
-
B-4 | Kassa-Screen: Veranstaltungs-Kassa
- Gesamt-Saldo-Ansicht (Salden aus allen Turnieren der Veranstaltung)
- Turnier-übergreifender Zahlvorgang (eine Zahlung, mehrere Rechnungen)
- Rechnungsvorschau je Turnier
🟠 Sprint C — Priorität 2 (nächste Woche)
-
C-1 |
StoreV2vollständig ablösen- Alle verbleibenden
StoreV2-Referenzen durch echte Repositories ersetzen StoreV2entfernen nach vollständiger Migration
- Alle verbleibenden
-
C-2 | VeranstalterNeu: Vereinssuche & Daten-Übernahme
- Vereins-Suche implementieren (Suche, Auswahl, Mapping)
- Validierung und Fehleranzeigen
-
C-3 | LAN-Sync-UI vorbereiten (ADR-0022 ✅ freigegeben)
SyncEvent-Datenmodell auscore-Modul einbinden (KMP-shared)originNodeId-Generierung und -Persistierung beim App-Start- WebSocket-Client auf Richter-Turm-Desk (Ktor-Client/KMP): HELLO/SYNC_PUSH/SYNC_ACK
- Geräte-Discovery-UI (gefundene Geräte im LAN via mDNS anzeigen)
- Sync-Status-Indicator in der Hauptnavigation (verbunden / getrennt / ausstehende Events)
- Offline-Indikator: ausstehende lokale Events sichtbar machen
- Domänen-Mastership beachten: Richter-Turm schreibt nur Bewertungen/Ergebnisse
-
C-4 | Lint-Bereinigung & Code-Qualität
-
C-5 | Design-System Härtung (Desktop Shell) ✅ 12. April 2026
- Radikaler Umbau auf modernere Seiten-Navigation (
NavigationRail) - Ablösung der Top-Bar durch Page-Header mit Breadcrumbs
- Refactoring
AdminUebersichtScreenfür Enterprise-Look (Spacing, Typography, ElevatedCards) - Konsistente Verwendung von
Dimensfür Spacing und Icon-Sizes - UI-Sichtbarkeit für Offline-First Sync-Status im Footer implementiert
- Eingabefelder optimiert: Standardisierte
MsTextFieldKomponente mit kompakter Desktop-Höhe (44.dp) und Enterprise-Styling eingeführt und global angewendet. - Ungenutzte Imports/Parameter entfernen
Long → Duration-Konvertierungen modernisieren- Redundante Not-null-Calls vereinfachen
- Radikaler Umbau auf modernere Seiten-Navigation (
⏸️ USB-Stick Fallback (Export/Import UI) — Separate Besprechung (Sprint B/C)
📌 Abhängigkeiten
| Warte auf | Von wem | Betrifft |
|---|---|---|
| Reiter/Pferde/Vereine/Funktionäre APIs | 👷 Backend B-1 | B-2 Repository-Verdrahtung |
| Rulebook Validierungs-Spezifikation | 📜 Rulebook B-2 | B-3 Live-Validierung |
| Kassa-Service API | 👷 Backend B-2 | B-4 Kassa-Screen |
| ✅ Erledigt | C-3 Sync-UI freigegeben | |
| Wireframes Edit-Dialoge / Kassa | 🖌️ UI/UX B-1/B-3 | B-3, B-4 Implementierung |
💡 Empfehlungen (nach Priorität)
- B-2 StoreV2-Ablösung ✅ Repositories angelegt — nächster Schritt:
StoreV2Feature-für-Feature ersetzen und Akzeptanz-Tests mit Mock Engine schreiben. - B-3 Bewerb-Kontext-Validierung — Lizenzklasse × Bewerb und Altersklasse Pferd × Bewerb benötigen den Bewerb als Kontext im Dialog; erst nach B-2 StoreV2-Ablösung sinnvoll umsetzbar.
- C-2 VeranstalterNeu — Offener Punkt aus Session 02.04; Vereinssuche fehlt noch für vollständigen Onboarding-Flow.