2.4 KiB
2.4 KiB
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]) verwaltetteams,rounds,fieldCountund stellt Mutationsfunktionen bereit (startNewRound,updateMatchResult,completeCurrentRound, u.a.). - Match-Generierung:
generateMatchesundcreateNextRoundMatchesin [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
updateMatchResultinTournamentContext).
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
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)