meldestelle/docs/06_Frontend/Navigation_Routing_Diagramm.md

207 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 DesktopApp startet im MVP ohne erzwungenen Login/Ping direkt in die HauptShell (VeranstaltungsVerwaltung).
- Der LoginKnoten und AuthGuard 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)