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

4.5 KiB
Raw Blame History

🎨 [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

    Referenzen:

    • docs/06_Frontend/MVVM_UDF_Pattern.md (Regeln, Vorlage, Referenz-Code)
    • frontend/features/veranstalter-feature/src/commonMain/.../VeranstalterViewModel.kt
    • frontend/features/veranstalter-feature/src/jvmMain/.../DefaultVeranstalterRepository.kt
    • frontend/features/veranstalter-feature/src/jvmMain/.../VeranstalterAuswahlScreen.kt (nutzt ViewModel/Intents)
  • 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

    Referenzen:

    • frontend/features/turnier-feature/src/commonMain/.../BewerbAnlegenViewModel.kt (State, Intents, Auto-Vorschlag)
    • frontend/features/turnier-feature/src/jvmMain/.../TurnierBewerbeTab.kt (Button „Bewerb Einfügen“ öffnet Dialog)

🟠 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