Some checks failed
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
- Added `SPRINT_EXECUTION_ORDER.md` to define the cross-role sprint step sequence. - Created individual roadmaps for Architect, Backend, Frontend, DevOps, Rulebook, QA, UI/UX, and Curator. - Captured developer responsibilities, dependencies, and timelines for Sprints A–C. - Aligned sprint planning documentation with session log agreements. - Provided structured documentation in `docs/04_Agents/Roadmaps/`. Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
88 lines
3.9 KiB
Markdown
88 lines
3.9 KiB
Markdown
# 🎨 [Frontend Expert] — Schritt-für-Schritt Roadmap
|
||
|
||
> **Stand:** 2. April 2026
|
||
> **Rolle:** KMP, Compose Desktop, State-Management, MVVM/UDF, Backend-Anbindung
|
||
|
||
---
|
||
|
||
## 🔴 Sprint A — Sofort (diese Woche)
|
||
|
||
- [ ] **A-1** | ViewModel-Architektur definieren und Referenz-Implementierung umsetzen
|
||
- [ ] MVVM mit UDF (Unidirectional Data Flow) als verbindliches Muster festlegen
|
||
- [ ] `Intent`- und `State`-Klassen-Struktur definieren (Vorlage für alle anderen ViewModels)
|
||
- [ ] `VeranstalterViewModel` als vollständige Referenz-Implementierung umsetzen
|
||
- [ ] `State`-Klasse definieren
|
||
- [ ] `Intent`-Klasse (Sealed Class) definieren
|
||
- [ ] Business-Logik aus Composables herausziehen (keine `StoreV2`-Aufrufe mehr direkt in `onSaved`)
|
||
- [ ] Lokalen `remember`-State durch ViewModel-State ersetzen
|
||
- [ ] Ergebnis als Muster-Dokument in `docs/06_Frontend/` ablegen
|
||
|
||
- [ ] **A-2** | Abteilungs-Logik im Bewerb-Dialog berücksichtigen
|
||
- [ ] Beim Anlegen eines Bewerbs: Abteilungs-Auswahl als Teil des Dialogs
|
||
- [ ] CSN-C-NEU: Automatischer Vorschlag der Pflicht-Teilung (ohne/mit Lizenz; R1/R2+)
|
||
- [ ] Abteilungs-Typ setzen: `SEPARATE_SIEGEREHRUNG` oder `ORGANISATORISCH`
|
||
|
||
---
|
||
|
||
## 🟠 Sprint B — Kurzfristig (nächste Woche)
|
||
|
||
- [ ] **B-1** | ViewModels für alle V2-Screens umsetzen
|
||
- [ ] `TurnierViewModel`
|
||
- [ ] `BewerbViewModel` (inkl. Abteilungs-Logik)
|
||
- [ ] `PferdProfilViewModel`
|
||
- [ ] `ReiterProfilViewModel`
|
||
- [ ] `VereinsViewModel`
|
||
- [ ] `FunktionaerViewModel`
|
||
- [ ] `AbteilungViewModel` (Startliste, Ergebnisse)
|
||
|
||
- [ ] **B-2** | Ktor-Clients und Repositories für Backend-Anbindung vorbereiten
|
||
- [ ] Ktor-HTTP-Client konfigurieren (BaseURL, Auth-Header, Timeout)
|
||
- [ ] Repository-Interface je Entität definieren (ermöglicht späteres Austauschen von Mock → Real)
|
||
- [ ] `VeranstalterRepository` mit echtem Backend-Client implementieren
|
||
- [ ] `TurnierRepository` implementieren
|
||
- [ ] `BewerbRepository` implementieren
|
||
- [ ] `AbteilungRepository` implementieren
|
||
- [ ] `StoreV2` schrittweise durch echte Repositories ersetzen
|
||
|
||
- [ ] **B-3** | Validierungs-Live-Feedback in Edit-Dialogen
|
||
- [ ] Spezifikation von 📜 Rulebook Expert (Sprint A-5) als Basis 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
|
||
|
||
- [ ] **B-4** | Kassa-Screen: Veranstaltungs-Kassa implementieren
|
||
- [ ] Gesamt-Saldo-Ansicht (Salden aus allen Turnieren der Veranstaltung)
|
||
- [ ] Turnier-übergreifender Zahlvorgang (eine Zahlung, mehrere Rechnungen)
|
||
- [ ] Rechnungsvorschau je Turnier
|
||
|
||
---
|
||
|
||
## 🟡 Sprint C — Mittelfristig (in 2 Wochen)
|
||
|
||
- [ ] **C-1** | Mock-Store (`StoreV2`) vollständig ablösen
|
||
- [ ] Alle verbleibenden `StoreV2`-Referenzen durch echte Repositories ersetzen
|
||
- [ ] `StoreV2` nach vollständiger Ablösung entfernen oder als `@Deprecated` markieren
|
||
|
||
- [ ] **C-2** | LAN-Sync-UI vorbereiten (nach ADR von Architect)
|
||
- [ ] Verbindungsstatus-Anzeige (Online/Offline/LAN)
|
||
- [ ] Sync-Trigger manuell und automatisch
|
||
|
||
> ⏸️ **USB-Stick Fallback (Export/Import UI)** — Separate Besprechung zu einem späteren Zeitpunkt
|
||
|
||
---
|
||
|
||
## 📌 Abhängigkeiten
|
||
|
||
| Warte auf | Von wem |
|
||
|----------------------------------|--------------------|
|
||
| Domänen-Modell final (Abteilung) | 🏗️ Architect |
|
||
| CRUD-Endpunkte | 👷 Backend |
|
||
| Validierungs-Spezifikation | 📜 Rulebook Expert |
|
||
| Wireframes Edit-Formulare | 🖌️ UI/UX Designer |
|
||
|
||
| Meine Aufgabe | Ermöglicht wem |
|
||
|--------------------------|-----------------------------------------------|
|
||
| ViewModel-Referenz (A-1) | Alle anderen ViewModels folgen diesem Muster |
|
||
| Ktor-Repositories (B-2) | Ablösung von StoreV2, echte Daten im Frontend |
|