Implement MVVM + UDF: Add BewerbAnlegenViewModel, VeranstalterViewModel, and state management for Veranstalter and Bewerb workflows. Refactor existing Composables to use ViewModels and intents. Update Turnier UI for Bewerb creation with mandatory division logic, and add documentation for MVVM patterns and guidelines. Mark A-1 and A-2 as complete in the roadmap.

This commit is contained in:
2026-04-02 22:29:16 +02:00
parent a8bc82eb91
commit 5e4c292f0c
9 changed files with 469 additions and 81 deletions
+23 -13
View File
@@ -7,20 +7,30 @@
## 🔴 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
- [x] **A-1** | ViewModel-Architektur definieren und Referenz-Implementierung umsetzen
- [x] MVVM mit UDF (Unidirectional Data Flow) als verbindliches Muster festlegen
- [x] `Intent`- und `State`-Klassen-Struktur definieren (Vorlage für alle anderen ViewModels)
- [x] `VeranstalterViewModel` als vollständige Referenz-Implementierung umsetzen
- [x] `State`-Klasse definieren
- [x] `Intent`-Klasse (Sealed Class) definieren
- [x] Business-Logik aus Composables herausziehen (keine `StoreV2`-Aufrufe mehr direkt in `onSaved`)
- [x] Lokalen `remember`-State durch ViewModel-State ersetzen
- [x] 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`
- [x] **A-2** | Abteilungs-Logik im Bewerb-Dialog berücksichtigen
- [x] Beim Anlegen eines Bewerbs: Abteilungs-Auswahl als Teil des Dialogs
- [x] CSN-C-NEU: Automatischer Vorschlag der Pflicht-Teilung (ohne/mit Lizenz; R1/R2+)
- [x] 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)
---