# WM 2026 Tippspiel – Backend Setup ## Voraussetzungen - Node.js 20+ - npm oder pnpm - Supabase Account (kostenlos) - football-data.org API Key (kostenlos) - Railway oder Render Account (Hosting) --- ## 1. Supabase einrichten 1. Projekt anlegen unter https://supabase.com 2. SQL Editor öffnen → `src/db/schema.sql` vollständig ausführen 3. Unter **Settings → Database → Connection string** die `DATABASE_URL` kopieren 4. Unter **Settings → API → service_role key** den Service Role Key kopieren --- ## 2. Staffbase Plugin Public Key 1. In Staffbase Studio: **Plugins → Neues Plugin anlegen** 2. Plugin-Typ: **External Web App (iFrame)** 3. Den angezeigten **Public Key (RSA)** kopieren 4. In `.env` als `STAFFBASE_PUBLIC_KEY` eintragen (mehrzeilig mit `\n` oder in Anführungszeichen) --- ## 3. football-data.org API Key 1. Registrieren unter https://www.football-data.org/client/register 2. API Key per E-Mail erhalten → in `.env` als `FOOTBALL_API_KEY` eintragen --- ## 4. Lokale Entwicklung ```bash cd backend npm install cp .env.example .env # .env mit echten Werten befüllen npm run dev # → Server läuft auf http://localhost:3001 # → Health Check: http://localhost:3001/health ``` --- ## 5. Deployment auf Railway ```bash # Railway CLI installieren npm install -g @railway/cli # Login railway login # Projekt erstellen und deployen railway init railway up # Environment Variables setzen (einmalig) railway variables set DATABASE_URL="..." \ STAFFBASE_PUBLIC_KEY="..." \ FOOTBALL_API_KEY="..." \ NODE_ENV=production \ CORS_ORIGIN="https://app.staffbase.com" ``` --- ## 6. Ersten Sync durchführen Nach dem Deployment: ```bash # Spiele von football-data.org laden (als Editor-User via Staffbase) POST /api/admin/sync # Oder direkt via curl (mit gültigem JWT): curl -X POST https://your-app.railway.app/api/admin/sync \ -H "Authorization: Bearer " ``` --- ## API Übersicht | Method | Endpoint | Beschreibung | |--------|----------|--------------| | GET | `/health` | Health Check | | GET | `/api/matches` | Alle Spiele (mit eigenem Tipp) | | GET | `/api/matches/:id` | Einzelnes Spiel | | POST | `/api/tips` | Tipp abgeben / aktualisieren | | GET | `/api/tips` | Eigene Tipps | | GET | `/api/leaderboard` | Rangliste (Top 50) | | GET | `/api/leaderboard/me` | Eigene Statistiken | | POST | `/api/admin/sync` | Spiele synchronisieren (Editor) | | POST | `/api/admin/evaluate` | Tipps auswerten (Editor) | | GET | `/api/admin/stats` | Admin-Statistiken (Editor) | --- ## Punkte-System | Ergebnis | Punkte | |----------|--------| | Exaktes Ergebnis | **3** | | Richtige Tendenz (S/U/N) | **1** | | Falsche Tendenz | **0** |