Files
nvj-turnierplaner2/description.md
T
2026-04-29 10:32:05 +02:00

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]) 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

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)