meldestelle/docs/04_Agents/Roadmaps/Frontend_Roadmap.md

7.1 KiB
Raw Blame History

🎨 [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)
    • VeranstalterViewModel als 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 / ORGANISATORISCH in UI

Sprint B (Teilweise) — Abgeschlossene Punkte

  • B-1 | ViewModels für alle V3-Screens
    • TurnierViewModel, BewerbViewModel, PferdProfilViewModel
    • ReiterProfilViewModel, VereinsViewModel, FunktionaerViewModel
    • AbteilungViewModel (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ändig
    • TurnierRepository Interface in commonMain vorbereitet
    • Fehler-Mapping HTTP → Domain-Errors einheitlich (DomainErrors.kt in core.network)
    • BewerbRepository Interface + DefaultBewerbRepository (Ktor) angelegt
    • AbteilungRepository Interface + DefaultAbteilungRepository (Ktor) angelegt
    • DefaultTurnierRepository (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 injizierbar
    • StoreV2 schrittweise ablösen (Feature-für-Feature, Toggle useRealBackend)
    • Akzeptanz-Tests per Fake-Server (Mock Engine, happy + error paths)
    • Dokumentation docs/06_Frontend/Networking.md
  • B-3 | Validierungs-Live-Feedback in Edit-Dialogen

    • MsValidationWrapper vorhanden: Error/Warning/Info mit Icon + Farbe
    • isValid in ReiterProfilViewModel + PferdProfilViewModel fü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)
    • ReiterProfilEditDialog mit MsValidationWrapper + isError + enabled=state.isValid
    • PferdProfilEditDialog mit MsValidationWrapper + isError + enabled=state.isValid
    • ValidationResult.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 | StoreV2 vollständig ablösen

    • Alle verbleibenden StoreV2-Referenzen durch echte Repositories ersetzen
    • StoreV2 entfernen nach vollständiger Migration
  • 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 aus core-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 AdminUebersichtScreen für Enterprise-Look (Spacing, Typography, ElevatedCards)
    • Konsistente Verwendung von Dimens für Spacing und Icon-Sizes
    • UI-Sichtbarkeit für Offline-First Sync-Status im Footer implementiert
    • Eingabefelder optimiert: Standardisierte MsTextField Komponente 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

⏸️ 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
ADR-0022 LAN-Sync 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)

  1. B-2 StoreV2-Ablösung Repositories angelegt — nächster Schritt: StoreV2 Feature-für-Feature ersetzen und Akzeptanz-Tests mit Mock Engine schreiben.
  2. 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.
  3. C-2 VeranstalterNeu — Offener Punkt aus Session 02.04; Vereinssuche fehlt noch für vollständigen Onboarding-Flow.