Files
meldestelle/docs/04_Agents/Roadmaps/Frontend_Roadmap.md
T
stefan 236876a043 docs: restructure and streamline sprint execution order
- Consolidated and removed redundant steps in `SPRINT_EXECUTION_ORDER.md`.
- Simplified descriptions and roadmap formatting for improved clarity.
- Updated progress and dependencies to align with Phase 8 objectives.
- Adjusted role-specific roadmaps to reflect the latest sprint updates.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
2026-04-03 09:43:11 +02:00

118 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🎨 [Frontend Expert] — Zwischenstand & Roadmap
> **Stand:** 3. April 2026
> **Rolle:** KMP, Compose Desktop, State-Management, Navigation, Backend-Anbindung
---
## ✅ Erledigte Sprints
### Sprint A — Abgeschlossen
- [x] **A-1** | ViewModel-Architektur definieren & Referenz-Implementierung
- [x] MVVM mit UDF als verbindliches Muster festgelegt
- [x] `Intent`/`State`-Struktur definiert (Sealed Classes)
- [x] `VeranstalterViewModel` als vollständige Referenz-Implementierung
- [x] Muster-Dokument in `docs/06_Frontend/` abgelegt
- [x] **A-2** | Abteilungs-Logik im Bewerb-Dialog
- [x] CSN-C-NEU: Automatischer Vorschlag der Pflicht-Teilung mit 4 Abteilungen
- [x] AssistChip „Pflicht-Teilung vorgeschlagen" bei erkanntem Typ
- [x] Abteilungs-Typen `SEPARATE_SIEGEREHRUNG` / `ORGANISATORISCH` in UI
### Sprint B (Teilweise) — Abgeschlossene Punkte
- [x] **B-1** | ViewModels für alle V3-Screens
- [x] `TurnierViewModel`, `BewerbViewModel`, `PferdProfilViewModel`
- [x] `ReiterProfilViewModel`, `VereinsViewModel`, `FunktionaerViewModel`
- [x] `AbteilungViewModel` (Startliste, Ergebnisse)
### Zusätzlich erledigt (Session 02.04.2026)
- [x] Navigation V2 / Back-Stack-System implementiert
- [x] Profil-Cards mit Edit-Dialog (Veranstalter, Pferd, Reiter, Verein, Funktionär)
- [x] Onboarding: State-Lift via `rememberSaveable` (Gerätename, Sicherheitsschlüssel)
- [x] Veranstaltungs-Wizard: Bestätigungs-Dialog mit Daten-Vorschau vor finalem Anlegen
- [x] Breadcrumbs und Zurück-Navigation korrigiert
---
## 🔴 Sprint B — Offen (höchste Priorität)
- [ ] **B-2** | Ktor-Clients & Repositories für Backend-Anbindung
- [x] `HttpClient`-Factory zentral konfiguriert (Auth, Timeout, JSON, Logging, Retry)
- [x] `VeranstalterRepository` (Interface + Default-Impl mit Ktor) vollständig
- [x] `TurnierRepository` Interface in commonMain vorbereitet
- [x] Fehler-Mapping HTTP → Domain-Errors einheitlich
- [ ] `BewerbRepository` und `AbteilungRepository` anlegen
- [ ] Koin Feature-Module: Repository-Interfaces auf Default-Impl binden
- [ ] `AuthApiClient`-Integration: Token-Provider injizierbar
- [ ] Turnier/Bewerb/Abteilung Backend-Endpunkte verdrahten
- [ ] `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`: `Error.short` inline, `Error.long` als Tooltip
- [ ] `isValid` im ViewModel für Speichern-Button-State nutzen
- [ ] OEPS-Nummer: Inline-Validierung beim Tippen
- [ ] FEI-ID: Inline-Validierung beim Tippen
- [ ] Lizenzklasse × Bewerbs-Klasse: Warnung wenn nicht erlaubt
- [ ] Altersklasse Pferd: Warnung wenn nicht kompatibel
- [ ] 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
- [ ] 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 Repository-Verdrahtung** — Bewerb/Abteilung-Repos und StoreV2-Ablösung sind der kritische Pfad für echte Daten
im Frontend.
2. **B-3 Live-Validierung** — Rulebook hat Spezifikation übergeben (Sprint B-1 ✅); Frontend kann sofort mit
`OetoValidators` loslegen.
3. **C-2 VeranstalterNeu** — Offener Punkt aus Session 02.04; Vereinssuche fehlt noch für vollständigen Onboarding-Flow.