43 lines
2.4 KiB
Markdown
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) |