9.7 KiB
❓ FAQ - Häufige Fragen
Antworten auf häufig gestellte Fragen zum Ninja Cross Parkour System.
🚀 Installation und Setup
Wie installiere ich das System?
Siehe Schnellstart für eine detaillierte Anleitung. Kurz gesagt:
- Repository klonen
npm installausführen.env-Datei konfigurierennpm run init-dbausführennpm startstarten
Welche Voraussetzungen benötige ich?
- Node.js v16 oder höher
- PostgreSQL 12 oder höher
- npm oder yarn
- Git für die Installation
Wie konfiguriere ich die Datenbank?
Bearbeiten Sie die .env-Datei mit Ihren Datenbankdaten:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=ninjaserver
DB_USER=your_username
DB_PASSWORD=your_password
Wie erstelle ich den ersten Admin-Benutzer?
npm run create-user
Standard-Anmeldedaten: admin / admin123
🔐 Authentifizierung
Wie funktioniert die API-Authentifizierung?
Das System verwendet API-Keys für die Authentifizierung. Generieren Sie einen Key:
curl -X POST http://localhost:3000/api/v1/web/generate-api-key \
-H "Content-Type: application/json" \
-d '{"description": "Mein API Key"}'
Wie verwende ich den API-Key?
Fügen Sie den Key in den Authorization Header ein:
Authorization: Bearer YOUR_API_KEY_HERE
Wie lange sind API-Keys gültig?
API-Keys sind standardmäßig unbegrenzt gültig, können aber mit einem Ablaufdatum versehen werden.
Kann ich mehrere API-Keys haben?
Ja, Sie können beliebig viele API-Keys erstellen, z.B. für verschiedene Anwendungen oder Benutzer.
🏃♂️ Spieler und Zeiten
Wie registriere ich einen neuen Spieler?
curl -X POST http://localhost:3000/api/v1/public/players \
-H "Content-Type: application/json" \
-d '{"firstname": "Max", "lastname": "Mustermann", "birthdate": "1990-01-01", "rfiduid": "AA:BB:CC:DD"}'
Wie verknüpfe ich eine RFID-Karte mit einem Spieler?
curl -X POST http://localhost:3000/api/v1/public/link-by-rfid \
-H "Content-Type: application/json" \
-d '{"rfiduid": "AA:BB:CC:DD", "supabase_user_id": "uuid-here"}'
Wie messe ich eine Zeit?
curl -X POST http://localhost:3000/api/v1/private/create-time \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"player_id": "AA:BB:CC:DD", "location_id": "Standort-Name", "recorded_time": "01:23.456"}'
Welches Zeitformat wird verwendet?
Zeiten werden im Format MM:SS.mmm gespeichert:
- Minuten:Sekunden.Millisekunden
- Beispiel:
01:23.456= 1 Minute, 23 Sekunden, 456 Millisekunden
Was ist eine gültige Zeit?
- Minimum: 30 Sekunden
- Maximum: 10 Minuten
- Schwelle: Konfigurierbar pro Standort (Standard: 120 Sekunden)
🏆 Achievements
Wie funktioniert das Achievement-System?
Das System überprüft automatisch täglich alle Spieler auf neue Achievements. Siehe Achievement System für Details.
Wann werden Achievements vergeben?
- Automatisch: Täglich um 23:59 Uhr
- Manuell: Über API-Endpoints
- Sofort: Bei bestimmten Aktionen
Wie viele Achievements gibt es?
Das System hat 32 verschiedene Achievements in 4 Kategorien:
- Konsistenz-basierte (8)
- Verbesserungs-basierte (4)
- Saisonale (4)
- Monatliche (12)
- Jahreszeiten (4)
Wie rufe ich Achievements ab?
# Alle Achievements
curl http://localhost:3000/api/achievements
# Spieler-Achievements
curl http://localhost:3000/api/achievements/player/{playerId}
# Spieler-Statistiken
curl http://localhost:3000/api/achievements/player/{playerId}/stats
📍 Standorte
Wie erstelle ich einen neuen Standort?
curl -X POST http://localhost:3000/api/v1/private/create-location \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "München", "latitude": 48.1351, "longitude": 11.5820}'
Wie ändere ich die Zeit-Schwelle eines Standorts?
curl -X PUT http://localhost:3000/api/v1/private/locations/{id}/threshold \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"threshold_seconds": 120}'
Wie viele Standorte kann ich haben?
Es gibt keine Begrenzung der Anzahl der Standorte.
🔧 Technische Fragen
Wie starte ich den Server?
# Entwicklung
npm run dev
# Produktion
npm start
Wie überwache ich den Server?
# Logs anzeigen
tail -f logs/server.log
# Achievement-Logs
tail -f /var/log/ninjaserver_achievements.log
# Datenbank-Status
psql -d ninjaserver -c "SELECT NOW();"
Wie teste ich die API?
# Test-Skript ausführen
node test-api.js
# Einzelne Endpoints testen
curl http://localhost:3000/api/v1/public/locations
Wie sichere ich die Datenbank?
# Vollständiges Backup
pg_dump -h localhost -U username -d ninjaserver > backup.sql
# Wiederherstellung
psql -h localhost -U username -d ninjaserver < backup.sql
🐛 Fehlerbehebung
"Port 3000 bereits belegt"
# Port freigeben
sudo lsof -ti:3000 | xargs kill -9
# Oder anderen Port verwenden
PORT=3001 npm start
"Datenbank-Verbindung fehlgeschlagen"
- PostgreSQL-Service prüfen:
sudo systemctl status postgresql - Datenbank-Credentials in
.envprüfen - Firewall-Einstellungen prüfen
"API-Key funktioniert nicht"
- API-Key neu generieren
- Authorization Header prüfen:
Bearer YOUR_API_KEY - Token-Ablaufzeit prüfen
"Zeit wird nicht gespeichert"
- Gültige Zeit prüfen (innerhalb der Schwelle)
- Standort korrekt ausgewählt
- Internetverbindung prüfen
- Seite neu laden
"Achievements werden nicht vergeben"
- Tägliche Prüfung abwarten
- Bedingungen erfüllt prüfen
- System-Status prüfen
- Administrator kontaktieren
📊 Statistiken und Monitoring
Wie rufe ich Statistiken ab?
# Admin-Statistiken
curl -H "Authorization: Bearer ADMIN_TOKEN" http://localhost:3000/api/v1/admin/stats
# Seiten-Statistiken
curl -H "Authorization: Bearer ADMIN_TOKEN" http://localhost:3000/api/v1/admin/page-stats
Wie überwache ich die Performance?
-- Langsamste Queries
SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY mean_time DESC LIMIT 10;
-- Index-Nutzung
SELECT schemaname, tablename, indexname, idx_scan
FROM pg_stat_user_indexes
ORDER BY idx_scan DESC;
Wie prüfe ich die Datenbank-Größe?
-- Gesamtgröße
SELECT pg_size_pretty(pg_database_size('ninjaserver'));
-- Tabellen-Größen
SELECT tablename, pg_size_pretty(pg_total_relation_size(tablename)) as size
FROM pg_tables WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(tablename) DESC;
🔒 Sicherheit
Wie sichere ich das System?
- Standardpasswörter ändern
- HTTPS in der Produktion verwenden
- Regelmäßige Backups
- API-Keys regelmäßig rotieren
- Firewall konfigurieren
Wie ändere ich das Admin-Passwort?
# Neuen Admin-Benutzer erstellen
npm run create-user
# Oder direkt in der Datenbank
UPDATE adminusers SET password_hash = '$2b$10$...' WHERE username = 'admin';
Wie deaktiviere ich einen API-Key?
UPDATE api_tokens SET is_active = false WHERE token = 'YOUR_TOKEN';
🌐 Deployment
Wie deploye ich in die Produktion?
- Server vorbereiten (Node.js, PostgreSQL)
- Code deployen
- Umgebungsvariablen setzen
- Datenbank initialisieren
- Nginx konfigurieren
- SSL-Zertifikat einrichten
Wie konfiguriere ich Nginx?
server {
listen 80;
server_name ninja.reptilfpv.de;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Wie richte ich SSL ein?
# Let's Encrypt
certbot --nginx -d ninja.reptilfpv.de
📱 Frontend
Wie integriere ich das System in meine Website?
Verwenden Sie die REST API oder das Web-Interface. Siehe API Referenz für Details.
Gibt es eine mobile App?
Eine native mobile App ist geplant, aber noch nicht verfügbar. Das Web-Interface ist responsive und funktioniert auf allen Geräten.
Wie passe ich das Design an?
Bearbeiten Sie die CSS-Dateien im public/css/ Verzeichnis oder erstellen Sie ein eigenes Frontend mit der API.
🔄 Updates und Wartung
Wie aktualisiere ich das System?
# Code aktualisieren
git pull origin main
# Abhängigkeiten aktualisieren
npm install
# Datenbank-Migrationen (falls vorhanden)
npm run migrate
# Server neu starten
npm restart
Wie führe ich Wartungsaufgaben durch?
-- Tabellen analysieren
ANALYZE;
-- Indizes neu aufbauen
REINDEX DATABASE ninjaserver;
-- Vakuum durchführen
VACUUM ANALYZE;
Wie lösche ich alte Daten?
-- Alte Zeiten löschen (älter als 1 Jahr)
DELETE FROM times WHERE created_at < NOW() - INTERVAL '1 year';
-- Alte Seitenaufrufe löschen (älter als 6 Monate)
DELETE FROM page_views WHERE created_at < NOW() - INTERVAL '6 months';
📞 Support
Wo bekomme ich Hilfe?
- 📖 Konsultieren Sie diese Dokumentation
- 🔍 Schauen Sie in Troubleshooting
- 📧 Kontaktieren Sie den Systemadministrator
- 🐛 Melden Sie Bugs über das Issue-System
Wie melde ich einen Bug?
- Beschreiben Sie das Problem
- Fügen Sie Logs hinzu
- Geben Sie Schritte zur Reproduktion an
- Erwähnen Sie Ihre Systemkonfiguration
Wie schlage ich eine Verbesserung vor?
- Beschreiben Sie die gewünschte Funktion
- Erklären Sie den Nutzen
- Geben Sie Beispiele an
- Erwähnen Sie mögliche Implementierung
Hinweis: Diese FAQ wird regelmäßig aktualisiert. Bei Fragen, die hier nicht beantwortet werden, wenden Sie sich an den Support.