meldestelle/docs/99_Journal/2026-03-24_Session_Log_Desktop_Shell.md
Stefan Mogeritsch 354bd49de6 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>
2026-03-24 18:22:15 +01:00

6.3 KiB
Raw Blame History

date type agents status
2026-03-24 Session Log Frontend Expert, Curator 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)