--- type: Reference status: ACTIVE owner: Lead Architect last_update: 2026-03-26 --- # Navigation & Routing Diagramm β€” Meldestelle Desktop πŸ—οΈ **[Lead Architect]** | 26. MΓ€rz 2026 Dieses Dokument visualisiert alle Screens und NavigationsΓΌbergΓ€nge der Compose Desktop App. Generiert aus: `frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/` --- MVP-Hinweis (2026-04-02): - Die Desktop‑App startet im MVP ohne erzwungenen Login/Ping direkt in die Haupt‑Shell (Veranstaltungs‑Verwaltung). - Der Login‑Knoten und Auth‑Guard im Diagramm bleiben aus PlanungsgrΓΌnden sichtbar, sind jedoch im MVP deaktiviert. --- ## 1. Übersicht: NavRail-Einstiegspunkte Die linke Navigationsleiste (NavRail) bietet folgende Direkteinstiege: | Icon | Label | Ziel-Screen | Status | |------|-------------------|--------------------|-----------------------------| | πŸ“… | Veranstaltungen | `Veranstaltungen` | βœ… Implementiert | | πŸ‡ | Reiter | `Reiter` | ⬜ Placeholder | | 🐴 | Pferde | `Pferde` | ⬜ Placeholder | | πŸ‘€ | FunktionΓ€re | `Funktionaere` | ⬜ Placeholder | | πŸ† | Meisterschaften | `Meisterschaften` | ⬜ Placeholder | | πŸ₯‡ | Cups | `Cups` | ⬜ Placeholder | | πŸ“₯ | Stammdaten-Import | `StammdatenImport` | 🟑 UI fertig, Polling offen | --- ## 2. VollstΓ€ndiges Navigationsfluss-Diagramm ```mermaid flowchart TD %% ─── App-Start & Auth ─────────────────────────────────────────── START([App Start]) --> LOGIN LOGIN["πŸ” Login\n/auth/login"] LOGIN -->|"onSuccess (returnTo)"| VERANSTALTUNGEN AUTH_GUARD{{"πŸ›‘οΈ Auth Guard\n(nicht eingeloggt?)"}} AUTH_GUARD -->|"nicht authentifiziert"| LOGIN %% ─── NavRail Top-Level ────────────────────────────────────────── NAVRAIL(["πŸ—‚οΈ NavRail"]) NAVRAIL --> VERANSTALTUNGEN NAVRAIL --> REITER NAVRAIL --> PFERDE NAVRAIL --> FUNKTIONAERE NAVRAIL --> MEISTERSCHAFTEN NAVRAIL --> CUPS NAVRAIL --> STAMMDATEN_IMPORT %% ─── Veranstaltungen-Flow ─────────────────────────────────────── VERANSTALTUNGEN["πŸ“… Veranstaltungen\n(AdminUebersichtScreen)\n/veranstaltungen"] VERANSTALTUNGEN -->|"+ Neue Veranstaltung"| VERANSTALTER_AUSWAHL VERANSTALTUNGEN -->|"Veranstaltung ΓΆffnen (id)"| VERANSTALTUNG_DETAIL VERANSTALTER_AUSWAHL["🏒 Veranstalter auswΓ€hlen\n/veranstalter/auswahl"] VERANSTALTER_AUSWAHL -->|"ZurΓΌck"| VERANSTALTUNGEN VERANSTALTER_AUSWAHL -->|"Weiter (veranstalterId)"| VERANSTALTER_DETAIL VERANSTALTER_DETAIL["🏒 Veranstalter Detail\n/veranstalter/{id}"] VERANSTALTER_DETAIL -->|"ZurΓΌck"| VERANSTALTER_AUSWAHL VERANSTALTER_DETAIL -->|"Veranstaltung ΓΆffnen (vId)"| VERANSTALTUNG_UEBERSICHT VERANSTALTER_DETAIL -->|"Neue Veranstaltung gespeichert"| VERANSTALTER_DETAIL VERANSTALTUNG_UEBERSICHT["πŸ“‹ Veranstaltung Übersicht\n/veranstalter/{verId}/veranstaltung/{vId}"] VERANSTALTUNG_UEBERSICHT -->|"ZurΓΌck"| VERANSTALTER_DETAIL VERANSTALTUNG_UEBERSICHT -->|"Turnier ΓΆffnen (tId)"| TURNIER_DETAIL VERANSTALTUNG_UEBERSICHT -->|"+ Neues Turnier"| TURNIER_NEU VERANSTALTUNG_DETAIL["πŸ“„ Veranstaltung Detail\n/veranstaltung/{id}"] VERANSTALTUNG_DETAIL -->|"ZurΓΌck"| VERANSTALTUNGEN VERANSTALTUNG_DETAIL -->|"+ Neues Turnier"| TURNIER_NEU VERANSTALTUNG_DETAIL -->|"Turnier ΓΆffnen (tId)"| TURNIER_DETAIL VERANSTALTUNG_NEU["βž• Neue Veranstaltung\n/veranstaltung/neu"] VERANSTALTUNG_NEU -->|"ZurΓΌck"| VERANSTALTUNGEN VERANSTALTUNG_NEU -->|"Speichern"| VERANSTALTUNGEN TURNIER_DETAIL["🏟️ Turnier Detail\n/veranstaltung/{vId}/turnier/{tId}\n(inkl. Nennungs-Tab ⭐)"] TURNIER_DETAIL -->|"ZurΓΌck"| VERANSTALTUNG_DETAIL TURNIER_NEU["βž• Neues Turnier\n/veranstaltung/{vId}/turnier/neu"] TURNIER_NEU -->|"ZurΓΌck"| VERANSTALTUNG_DETAIL TURNIER_NEU -->|"Speichern"| VERANSTALTUNG_DETAIL %% ─── Stammdaten-Import ────────────────────────────────────────── STAMMDATEN_IMPORT["πŸ“₯ Stammdaten Import\n/stammdaten/import\n(ZNS ZIP-Import)"] %% ─── Placeholder Screens ──────────────────────────────────────── REITER["πŸ‡ Reiter\n/reiter\n⬜ Placeholder"] PFERDE["🐴 Pferde\n/pferde\n⬜ Placeholder"] FUNKTIONAERE["πŸ‘€ FunktionΓ€re\n/funktionaere\n⬜ Placeholder"] MEISTERSCHAFTEN["πŸ† Meisterschaften\n/meisterschaften\n⬜ Placeholder"] CUPS["πŸ₯‡ Cups\n/cups\n⬜ Placeholder"] %% ─── Logout ───────────────────────────────────────────────────── LOGOUT(["πŸšͺ Logout"]) LOGOUT -->|"Token lΓΆschen"| LOGIN %% ─── Styling ──────────────────────────────────────────────────── style LOGIN fill:#f0a500,color:#000 style AUTH_GUARD fill:#e74c3c,color:#fff style VERANSTALTUNGEN fill:#2ecc71,color:#000 style TURNIER_DETAIL fill:#3498db,color:#fff style STAMMDATEN_IMPORT fill:#9b59b6,color:#fff style REITER fill:#bdc3c7,color:#555 style PFERDE fill:#bdc3c7,color:#555 style FUNKTIONAERE fill:#bdc3c7,color:#555 style MEISTERSCHAFTEN fill:#bdc3c7,color:#555 style CUPS fill:#bdc3c7,color:#555 ``` --- ## 3. Screens nach Status ### βœ… VollstΓ€ndig implementiert | Screen | Route | Komponente | |-----------------------------|---------------------------------------------|-----------------------------------------| | Login | `/auth/login` | `LoginScreen` | | Veranstaltungen (Übersicht) | `/veranstaltungen` | `AdminUebersichtScreen` | | Veranstalter Auswahl | `/veranstalter/auswahl` | `VeranstalterAuswahlScreen` | | Veranstalter Detail | `/veranstalter/{id}` | `VeranstalterDetailScreen` | | Veranstaltung Übersicht | `/veranstalter/{verId}/veranstaltung/{vId}` | `VeranstaltungUebersichtScreen` | | Veranstaltung Detail | `/veranstaltung/{id}` | `VeranstaltungDetailScreen` | | Veranstaltung Neu | `/veranstaltung/neu` | `VeranstaltungNeuScreen` | | Turnier Detail | `/veranstaltung/{vId}/turnier/{tId}` | `TurnierDetailScreen` + `NennungsMaske` | | Turnier Neu | `/veranstaltung/{vId}/turnier/neu` | `TurnierNeuScreen` | ### 🟑 Teilweise implementiert | Screen | Route | Offen | |-------------------|----------------------|------------------------------------------------| | Stammdaten Import | `/stammdaten/import` | Status-Polling zum Backend fehlt (ZNS Phase 3) | ### ⬜ Placeholder (NavRail sichtbar, Screen leer) | Screen | Route | |-----------------|--------------------| | Reiter | `/reiter` | | Pferde | `/pferde` | | FunktionΓ€re | `/funktionaere` | | Meisterschaften | `/meisterschaften` | | Cups | `/cups` | ### πŸ—‘οΈ Definiert aber nicht in Desktop-Navigation eingebunden | Screen | Route | Hinweis | |------------------|----------------------|---------------------------------| | Landing | `/` | Web-App Relikt | | Home | `/home` | Web-App Relikt | | Dashboard | `/dashboard` | Web-App Relikt | | Ping | `/ping` | Dev/Health-Check | | Profile | `/profile` | Web-App Relikt | | OrganizerProfile | `/organizer/profile` | Web-App Relikt | | AuthCallback | `/auth/callback` | Web-App Relikt (OAuth Redirect) | | Nennung | `/nennung` | Web-App Relikt | | CreateTournament | `/tournament/create` | Web-App Relikt | --- ## 4. Wichtige Hinweise ### Auth Guard Jeder Screen (außer `Login`) ist durch den Auth Guard geschΓΌtzt: ``` if (!authState.isAuthenticated && currentScreen !is AppScreen.Login) { nav.navigateToScreen(AppScreen.Login(returnTo = AppScreen.Veranstaltungen)) } ``` ### Web-App Relikte im AppScreen Es existieren 9 Screens (`Landing`, `Home`, `Dashboard`, `Ping`, `Profile`, `OrganizerProfile`, `AuthCallback`, `Nennung`, `CreateTournament`), die aus der alten Web-App stammen und in der Desktop-App nicht gerendert werden. β†’ **Offene Entscheidung:** Bereinigen oder fΓΌr zukΓΌnftige Web-App-Phase behalten? Siehe ADR-Bedarf. ### Nennungs-Tab ⭐ Der `TurnierDetailScreen` enthΓ€lt den wichtigsten fachlichen Screen: die `NennungsMaske` (Bewerbe-Tab). Dies ist das HerzstΓΌck des `registration-context`. --- ## 5. Referenzen - Quellcode: `frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/DesktopApp.kt` - Quellcode: `frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/screens/DesktopMainLayout.kt` - Quellcode: `frontend/core/src/commonMain/kotlin/at/mocode/frontend/core/navigation/AppScreen.kt` - ZNS-Importer Roadmap: `docs/01_Architecture/Roadmap_ZNS_Importer.md` - Figma Design-Baseline: Vision_03 (ADR Session Log 2026-03-24)