Files
2026-04-29 10:32:05 +02:00

43 lines
2.4 KiB
Markdown

NVJ Turnierplaner — Projektbeschreibung und Befunde
Kurzbeschreibung
- Zweck: Webapp zur Verwaltung von Volleyball-Turnieren (NVJ). Teams anlegen, Runden generieren, Ergebnisse eintragen und Scoreboard anschauen.
- Tech-Stack: Vite, React 18, TypeScript, Tailwind CSS, shadcn/ui, Vitest.
Architekturüberblick
- Globaler State: `TournamentContext` ([src/context/TournamentContext.tsx]) verwaltet `teams`, `rounds`, `fieldCount` und stellt Mutationsfunktionen bereit (`startNewRound`, `updateMatchResult`, `completeCurrentRound`, u.a.).
- Match-Generierung: `generateMatches` und `createNextRoundMatches` in [src/utils/tournamentUtils.ts] implementieren Start- und Rotationslogik (Circle-Rotation, Wartelisten, Felderaufteilung zwischen Ligen).
- Typen: Zentrale Typen in [src/types/tournament.ts] (`Team`, `Match`, `Round`, `TeamScore`).
- UI: Hauptansicht `TournamentView` ([src/components/TournamentView.tsx]) zeigt aktuelles Spielgeschehen; `MatchScoreInput` ([src/components/MatchScoreInput.tsx]) ermöglicht Ergebnis-Eingabe.
Wichtige Erkenntnisse (kurzer Testlauf)
- Dev-Server: Vite Dev-Server läuft lokal unter http://localhost:5173/ (getestet).
- Tests: `npm run test` (Vitest) ausgeführt — alle Tests bestanden (1 Test, 1 File).
- IDs werden via `crypto.randomUUID()` erzeugt — keine DB-Anbindung, alles im Memory State.
- Punkteberechnung: Differenzbasiert mit Bonus für Gewinner (siehe `updateMatchResult` in `TournamentContext`).
Empfohlene nächste Schritte
- UI-Test: Kurz manuell Runde generieren, Ergebnisse eintragen, und Scoreboard prüfen.
- Feature-Ideen: Persistenz (LocalStorage/IndexedDB), Export/Import von Turnierständen, Druckansicht des Spielplans.
Rotationslogik beim Rundenwechsel:
- Case 1: Keine wartenden Teams -> die erste Mannschaft bleibt als Anker fix, alle anderen rotieren um 1 Position.
- Case 2: 1 wartendes Team -> das wartende Team rückt nach vorne, das letzte Spielteam geht auf Warteposition.
- Case 3: Mehrere wartende Teams (2+) -> alle wartenden Teams rücken nach vorne, entsprechend viele bisher spielende Teams gehen auf Warteposition.
Hinweis: Die erste Runde wird separat in `generateMatches()` zufällig aufgebaut; diese 3 Cases beschreiben nur die Rotation für Folgerunden.
Wie man lokal startet
```bash
npm install
npm run dev
# In neuem Terminal
npm run test
```
Datum des Tests: 2026-04-29
Testergebnis (Vitest): 1 Test bestanden
— Copilot (kurze Analyse)