TTurnier - Tischtennis-Turnierverwaltung
1. Allgemeine Beschreibung
Diese Anwendung dient der Verwaltung von Tischtennisturnieren und der Bereitstellung von Live-Ergebnissen für Zuschauer. Sie ist als Node.js-Anwendung mit einem Express-Backend und einer PostgreSQL-Datenbank konzipiert.
Benutzeroberflächen:
- Admin-Oberfläche: Verwaltung von Turnieren, Spielern, Ergebnissen, Benutzern und Statistiken.
- Schiedsrichter-Oberfläche: Eintragen von Spielergebnissen.
- Zuschauer-Oberfläche: Anzeige von Live-Ergebnissen, Turnierplänen und Statistiken.
2. Voraussetzungen
- Node.js (Version 18.x oder höher empfohlen)
- npm (wird mit Node.js installiert)
- Eine laufende PostgreSQL Datenbank (z. B. über Docker:
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
) - OpenSSL (normalerweise auf Linux/macOS vorinstalliert, für Windows separat installieren) zum Generieren des selbstsignierten HTTPS-Zertifikats.
3. Installation
-
Klone das Repository:
git clone <repository-url> cd tischtennis-turnierverwaltung
-
Installiere die Abhängigkeiten:
npm install
-
Konfiguration:
- Kopiere die
.env.example
-Datei nach.env
:cp .env.example .env
- Bearbeite die
.env
-Datei und trage deine Datenbank-Verbindungsdaten und einen sicheren JWT-Schlüssel ein:ErsetzeDATABASE_URL=postgresql://<db_user>:<db_password>@<db_host>:<db_port>/<db_name> JWT_SECRET=DEIN_SEHR_SICHERER_GEHEIMER_SCHLUESSEL_HIER # Ändere dies unbedingt! PORT=3000 # Optional: Konfiguration für automatische Backups (Pfad und Intervall) # BACKUP_PATH=/pfad/zu/backups # BACKUP_INTERVAL_MINUTES=60
<db_user>
,<db_password>
,<db_host>
,<db_port>
,<db_name>
mit deinen PostgreSQL-Daten. Standard für den Docker-Befehl oben:postgresql://postgres:mysecretpassword@localhost:5432/postgres
(ggf. musst du die Datenbank 'postgres' erst manuell erstellen oder einen anderen Namen wählen).
- Kopiere die
-
Generiere ein selbstsigniertes HTTPS-Zertifikat:
- Führe das mitgelieferte Skript aus (oder führe die openssl-Befehle manuell aus):
npm run generate-cert
- Dies erstellt
key.pem
undcert.pem
im Hauptverzeichnis. Hinweis: Browser werden diesem Zertifikat nicht vertrauen und eine Warnung anzeigen. Für Produktionsumgebungen solltest du ein Zertifikat von einer anerkannten Zertifizierungsstelle (z. B. Let's Encrypt) verwenden, oft in Kombination mit einem Reverse Proxy wie Nginx.
- Führe das mitgelieferte Skript aus (oder führe die openssl-Befehle manuell aus):
4. Datenbank-Initialisierung
Die Anwendung versucht beim Start automatisch, die notwendigen Tabellen zu erstellen, falls sie noch nicht existieren. Das Skript src/db/init.sql
enthält die CREATE TABLE
-Anweisungen. Stelle sicher, dass der in .env
konfigurierte Datenbankbenutzer die Berechtigung hat, Tabellen zu erstellen.
5. Anwendung starten
- Entwicklungsmodus (mit automatischer Neuladung bei Änderungen):
npm run dev
- Produktionsmodus:
npm start
Die Anwendung läuft standardmäßig unter https://localhost:3000
.
6. Verwendung
- Admin-Oberfläche:
https://localhost:3000/admin.html
- Schiedsrichter-Oberfläche:
https://localhost:3000/referee.html
- Zuschauer-Oberfläche:
https://localhost:3000/spectator.html
Erster Admin-Benutzer: Beim ersten Start wird automatisch ein Admin-Benutzer angelegt, wenn noch keine Benutzer in der Datenbank existieren. Die Standard-Zugangsdaten sind:
- Benutzername:
admin
- Passwort:
password
Ändere dieses Passwort sofort nach dem ersten Login über die (noch zu implementierende) Benutzerverwaltung!
7. API Endpunkte (Beispiele)
POST /api/auth/register
- Registriert einen neuen Benutzer (initial nur Admin möglich, später eingeschränkt).POST /api/auth/login
- Loggt einen Benutzer ein und gibt ein JWT zurück.GET /api/tournaments
- Holt alle Turniere (Authentifizierung erforderlich).POST /api/tournaments
- Erstellt ein neues Turnier (Admin erforderlich).GET /api/tournaments/:id
- Holt ein spezifisches Turnier (Authentifizierung erforderlich).PUT /api/tournaments/:id
- Aktualisiert ein Turnier (Admin erforderlich).DELETE /api/tournaments/:id
- Löscht ein Turnier (Admin erforderlich).- (Weitere Endpunkte für Spieler, Matches, etc. folgen dem gleichen Muster)
8. Wichtige Hinweise
- Sicherheit: Die Standard-Admin-Zugangsdaten sind unsicher. Das JWT-Secret in
.env
muss geheim gehalten werden. Das selbstsignierte Zertifikat bietet Verschlüsselung, aber keine Verifizierung der Identität des Servers. - Datenbank-Backups: Die Implementierung automatischer Backups über
node-cron
undpg_dump
ist angedeutet, aber die genaue Konfiguration (Pfad, Berechtigungen, Fehlerbehandlung) muss an die Serverumgebung angepasst werden. Es ist oft zuverlässiger, dies über System-Cron-Jobs zu lösen. - Funktionsumfang: Dies ist eine Basisimplementierung. Viele der in der ursprünglichen Anfrage genannten Features (PDF, CSV, Push-Benachrichtigungen, detaillierte Statistiken, Turnierbaum-Logik) sind noch nicht implementiert.