feat: integrate new desktop shell and extend backend & ADRs
- Added `meldestelle-desktop` module using JVM/Compose Desktop, registered in `settings.gradle.kts`. - Integrated new screens and desktop navigation into core: `Veranstaltungen`, `TurnierDetail`, etc. - Expanded backend with `ExposedFunktionaerRepository` in `officials-infrastructure`. - Completed ADRs for bounded context mapping (`ADR-0014`) and context map (`ADR-0015`). - Updated and extended project documentation with session logs and architecture decisions. Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
---
|
||||
date: 2026-03-24
|
||||
type: Session Log
|
||||
agents: Frontend Expert, Curator
|
||||
status: COMPLETED
|
||||
---
|
||||
|
||||
# Session Log – KMP/Compose Desktop Shell aufsetzen
|
||||
|
||||
🎨 **[Frontend Expert]** & 🧹 **[Curator]** | 24. März 2026
|
||||
|
||||
---
|
||||
|
||||
## Zusammenfassung der Session
|
||||
|
||||
Aufsetzen der dedizierten Desktop-Shell `meldestelle-desktop` als eigenständiges
|
||||
JVM/Compose-Desktop-Modul gemäß Desktop-First-Strategie (ADR-0009) und Vision_03-Design-Baseline.
|
||||
|
||||
---
|
||||
|
||||
## Durchgeführte Aktivitäten
|
||||
|
||||
### 1. Neues Modul: `frontend/shells/meldestelle-desktop`
|
||||
|
||||
- Eigenständige Desktop-Shell, getrennt vom Web-Portal (`meldestelle-portal`)
|
||||
- Reines JVM-Modul (kein JS/WASM) – Desktop-First gemäß MASTER_ROADMAP
|
||||
- In `settings.gradle.kts` registriert
|
||||
- `compileKotlinJvm` ✅ BUILD SUCCESSFUL
|
||||
|
||||
### 2. Projektstruktur
|
||||
|
||||
```
|
||||
frontend/shells/meldestelle-desktop/
|
||||
├── build.gradle.kts # JVM-only, compose.desktop, nativeDistributions
|
||||
└── src/jvmMain/kotlin/at/mocode/desktop/
|
||||
├── main.kt # application {} Entry-Point, Koin-Init, Window
|
||||
├── DesktopApp.kt # Login-Gate + Haupt-Composable
|
||||
├── di/
|
||||
│ └── DesktopModule.kt # Koin: DesktopNavigationPort, CurrentUserProvider, DeepLinkHandler
|
||||
├── navigation/
|
||||
│ └── DesktopNavigationPort.kt # StateFlow-basierte Navigation
|
||||
└── screens/
|
||||
├── DesktopMainLayout.kt # Sidebar (220dp) + Content-Bereich
|
||||
├── PlaceholderContent.kt # Wiederverwendbarer Platzhalter
|
||||
├── VeranstaltungenScreen.kt # Übersicht + "Neue Veranstaltung"-Button
|
||||
├── VeranstaltungNeuScreen.kt # Tabs: Übersicht | Stammdaten* | Organisation | Preisliste
|
||||
├── VeranstaltungDetailScreen.kt # Übersicht-Tab + Turniere-Section
|
||||
├── TurnierNeuScreen.kt # Tabs: Übersicht | Stammdaten | Organisation | Bewerbe⭐* | Preisliste
|
||||
├── TurnierDetailScreen.kt # Bewerbe-Tab integriert NennungsMaske (nennung-feature)
|
||||
└── AktorScreens.kt # Reiter, Pferde, Funktionäre, Meisterschaften, Cups
|
||||
```
|
||||
|
||||
### 3. Navigation gemäß Vision_03
|
||||
|
||||
Sidebar-Navigation mit 6 Einträgen (links, 220dp, Material3 `surfaceVariant`):
|
||||
|
||||
| Eintrag | Route | Status |
|
||||
|-----------------|--------------------|---------------------------------|
|
||||
| Veranstaltungen | `/veranstaltungen` | ✅ Screen implementiert |
|
||||
| Reiter | `/reiter` | ✅ Placeholder |
|
||||
| Pferde | `/pferde` | ✅ Placeholder |
|
||||
| Funktionäre | `/funktionaere` | ✅ Placeholder |
|
||||
| Meisterschaften | `/meisterschaften` | ✅ Placeholder (Phase 2+) |
|
||||
| Cups | `/cups` | ✅ Placeholder (Phase 2+) |
|
||||
| Logout | — | ✅ Löscht Token, zurück zu Login |
|
||||
|
||||
### 4. Neue `AppScreen`-Einträge (core/navigation)
|
||||
|
||||
Folgende Screens wurden in `AppScreen.kt` ergänzt:
|
||||
|
||||
- `Veranstaltungen`, `VeranstaltungNeu`, `VeranstaltungDetail(id)`
|
||||
- `TurnierNeu(veranstaltungId)`, `TurnierDetail(veranstaltungId, turnierId)`
|
||||
- `Reiter`, `Pferde`, `Funktionaere`, `Meisterschaften`, `Cups`
|
||||
|
||||
### 5. Nennungs-Integration
|
||||
|
||||
- `TurnierDetailScreen` → Bewerbe-Tab (⭐ Standard-Tab) integriert `NennungsMaske` aus `nennung-feature`
|
||||
- Callbacks für Startliste, Ergebnisse, Abrechnung als TODO vorbereitet
|
||||
|
||||
---
|
||||
|
||||
## Erstellte / Aktualisierte Dokumente
|
||||
|
||||
| Dokument | Aktion | Beschreibung |
|
||||
|-----------------------------------------------------------------------------------|----------------|---------------------------------------------------------------------|
|
||||
| `frontend/shells/meldestelle-desktop/build.gradle.kts` | ✅ NEU | JVM-only Shell, compose.desktop, nativeDistributions (Deb/Msi/Dmg) |
|
||||
| `frontend/shells/meldestelle-desktop/src/.../main.kt` | ✅ NEU | application {} Entry-Point, Koin-Init, Window 1400×900 |
|
||||
| `frontend/shells/meldestelle-desktop/src/.../DesktopApp.kt` | ✅ NEU | Login-Gate, delegiert an DesktopMainLayout |
|
||||
| `frontend/shells/meldestelle-desktop/src/.../di/DesktopModule.kt` | ✅ NEU | Koin-Modul mit Navigation, CurrentUserProvider, DeepLinkHandler |
|
||||
| `frontend/shells/meldestelle-desktop/src/.../navigation/DesktopNavigationPort.kt` | ✅ NEU | StateFlow-Navigation |
|
||||
| `frontend/shells/meldestelle-desktop/src/.../screens/*.kt` | ✅ NEU | 8 Screen-Dateien (Layout, Placeholders, Veranstaltung/Turnier-Flow) |
|
||||
| `frontend/core/navigation/.../AppScreen.kt` | ✅ ERWEITERT | 10 neue Desktop-Screens ergänzt |
|
||||
| `settings.gradle.kts` | ✅ ERWEITERT | `:frontend:shells:meldestelle-desktop` registriert |
|
||||
| `docs/01_Architecture/MASTER_ROADMAP.md` | ✅ AKTUALISIERT | Frontend-Expert-Tasks als abgeschlossen markiert |
|
||||
|
||||
---
|
||||
|
||||
## Wichtige Entscheidungen
|
||||
|
||||
1. **Eigenständiges Modul** statt Erweiterung des Portal-Shells → saubere Trennung Desktop/Web
|
||||
2. **Login-Gate** in `DesktopApp.kt` → Desktop startet immer mit Login, kein Landing-Screen
|
||||
3. **`PrimaryTabRow`** statt deprecated `TabRow` verwendet
|
||||
4. **`NennungsMaske`** direkt im Bewerbe-Tab des `TurnierDetailScreen` integriert
|
||||
|
||||
---
|
||||
|
||||
## Nächste Schritte (Empfehlung)
|
||||
|
||||
- [ ] 👷 **[Backend Developer]**: `DomVeranstaltung`, `DomTurnier`, `DomBewerb`, `DomAbteilung` implementieren
|
||||
- [ ] 🎨 **[Frontend Expert]**: `VeranstaltungenScreen` mit echten Daten aus Repository befüllen
|
||||
- [ ] 🎨 **[Frontend Expert]**: Startlisten- und Ergebnisse-Screens implementieren (competition-context)
|
||||
- [ ] 🎨 **[Frontend Expert]**: Formular-Felder für `VeranstaltungNeuScreen` und `TurnierNeuScreen` ausbauen
|
||||
|
||||
---
|
||||
|
||||
*Session-Dauer: 24. März 2026*
|
||||
*Curator: Junie (KI-Agent)*
|
||||
Reference in New Issue
Block a user