381 lines
9.7 KiB
Markdown
381 lines
9.7 KiB
Markdown
# ❓ 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](Schnellstart) für eine detaillierte Anleitung. Kurz gesagt:
|
|
1. Repository klonen
|
|
2. `npm install` ausführen
|
|
3. `.env`-Datei konfigurieren
|
|
4. `npm run init-db` ausführen
|
|
5. `npm start` starten
|
|
|
|
### 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:
|
|
```env
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
DB_NAME=ninjaserver
|
|
DB_USER=your_username
|
|
DB_PASSWORD=your_password
|
|
```
|
|
|
|
### Wie erstelle ich den ersten Admin-Benutzer?
|
|
```bash
|
|
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:
|
|
```bash
|
|
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:
|
|
```http
|
|
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?
|
|
```bash
|
|
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?
|
|
```bash
|
|
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?
|
|
```bash
|
|
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](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?
|
|
```bash
|
|
# 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?
|
|
```bash
|
|
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?
|
|
```bash
|
|
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?
|
|
```bash
|
|
# Entwicklung
|
|
npm run dev
|
|
|
|
# Produktion
|
|
npm start
|
|
```
|
|
|
|
### Wie überwache ich den Server?
|
|
```bash
|
|
# 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?
|
|
```bash
|
|
# Test-Skript ausführen
|
|
node test-api.js
|
|
|
|
# Einzelne Endpoints testen
|
|
curl http://localhost:3000/api/v1/public/locations
|
|
```
|
|
|
|
### Wie sichere ich die Datenbank?
|
|
```bash
|
|
# 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"
|
|
```bash
|
|
# Port freigeben
|
|
sudo lsof -ti:3000 | xargs kill -9
|
|
|
|
# Oder anderen Port verwenden
|
|
PORT=3001 npm start
|
|
```
|
|
|
|
### "Datenbank-Verbindung fehlgeschlagen"
|
|
1. PostgreSQL-Service prüfen: `sudo systemctl status postgresql`
|
|
2. Datenbank-Credentials in `.env` prüfen
|
|
3. Firewall-Einstellungen prüfen
|
|
|
|
### "API-Key funktioniert nicht"
|
|
1. API-Key neu generieren
|
|
2. Authorization Header prüfen: `Bearer YOUR_API_KEY`
|
|
3. Token-Ablaufzeit prüfen
|
|
|
|
### "Zeit wird nicht gespeichert"
|
|
1. Gültige Zeit prüfen (innerhalb der Schwelle)
|
|
2. Standort korrekt ausgewählt
|
|
3. Internetverbindung prüfen
|
|
4. Seite neu laden
|
|
|
|
### "Achievements werden nicht vergeben"
|
|
1. Tägliche Prüfung abwarten
|
|
2. Bedingungen erfüllt prüfen
|
|
3. System-Status prüfen
|
|
4. Administrator kontaktieren
|
|
|
|
## 📊 Statistiken und Monitoring
|
|
|
|
### Wie rufe ich Statistiken ab?
|
|
```bash
|
|
# 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?
|
|
```sql
|
|
-- 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?
|
|
```sql
|
|
-- 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?
|
|
```bash
|
|
# 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?
|
|
```sql
|
|
UPDATE api_tokens SET is_active = false WHERE token = 'YOUR_TOKEN';
|
|
```
|
|
|
|
## 🌐 Deployment
|
|
|
|
### Wie deploye ich in die Produktion?
|
|
1. Server vorbereiten (Node.js, PostgreSQL)
|
|
2. Code deployen
|
|
3. Umgebungsvariablen setzen
|
|
4. Datenbank initialisieren
|
|
5. Nginx konfigurieren
|
|
6. SSL-Zertifikat einrichten
|
|
|
|
### Wie konfiguriere ich Nginx?
|
|
```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?
|
|
```bash
|
|
# 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](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?
|
|
```bash
|
|
# 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?
|
|
```sql
|
|
-- Tabellen analysieren
|
|
ANALYZE;
|
|
|
|
-- Indizes neu aufbauen
|
|
REINDEX DATABASE ninjaserver;
|
|
|
|
-- Vakuum durchführen
|
|
VACUUM ANALYZE;
|
|
```
|
|
|
|
### Wie lösche ich alte Daten?
|
|
```sql
|
|
-- 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](Troubleshooting)
|
|
- 📧 Kontaktieren Sie den Systemadministrator
|
|
- 🐛 Melden Sie Bugs über das Issue-System
|
|
|
|
### Wie melde ich einen Bug?
|
|
1. Beschreiben Sie das Problem
|
|
2. Fügen Sie Logs hinzu
|
|
3. Geben Sie Schritte zur Reproduktion an
|
|
4. Erwähnen Sie Ihre Systemkonfiguration
|
|
|
|
### Wie schlage ich eine Verbesserung vor?
|
|
1. Beschreiben Sie die gewünschte Funktion
|
|
2. Erklären Sie den Nutzen
|
|
3. Geben Sie Beispiele an
|
|
4. 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.
|