const { requireAuth, requireAdmin } = require("../middleware/auth"); // Falls Middleware in einer extra Datei liegt const express = require("express"); const pool = require("../db"); // Stelle sicher, dass dein DB-Pool importiert wird const router = express.Router(); // Spieleliste router.get("/:id?", async (req, res) => { const { id } = req.params; try { let result; if (id) { // Falls eine ID übergeben wurde, geben wir alle Felder des Spiels zurück result = await pool.query("SELECT * FROM spiele WHERE id = $1", [id]); if (result.rows.length === 0) { return res.status(404).json({ error: "Spiel nicht gefunden" }); } return res.json(result.rows[0]); } else { // Falls keine ID übergeben wurde, geben wir nur ID und Name zurück result = await pool.query( "SELECT id, name FROM spiele ORDER BY name ASC" ); return res.json(result.rows); } } catch (err) { console.error(err); res.status(500).json({ error: "Interner Serverfehler" }); } }); // **2. Spiel löschen (Nur für Admins)** router.delete("/:id", requireAuth, requireAdmin, async (req, res) => { const { id } = req.params; try { // Prüfen, ob das Spiel existiert const spielResult = await pool.query( "SELECT id, name FROM spiele WHERE id = $1", [id] ); if (spielResult.rows.length === 0) { return res.status(404).json({ error: "Spiel nicht gefunden" }); } // Spiel löschen await pool.query("DELETE FROM spiele WHERE id = $1", [id]); res.json({ message: "Spiel erfolgreich gelöscht", spiel: spielResult.rows[0], }); } catch (err) { console.error(err); res.status(500).json({ error: "Interner Serverfehler" }); } }); router.put("/:id?", requireAuth, requireAdmin, async (req, res) => { const { id } = req.params; const { name, material, regeln, variationen, dauer, type } = req.body; try { let result; if (id) { // **Spiel aktualisieren** → Alle Felder müssen übergeben werden if (!name || !material || !regeln || !variationen || !dauer || !type) { return res.status(400).json({ error: "Alle Felder sind erforderlich" }); } result = await pool.query( `UPDATE spiele SET name = $1, material = $2, regeln = $3, variationen = $4, dauer = $5, type = $6 WHERE id = $7 RETURNING *`, [name, material, regeln, variationen, dauer, type, id] ); if (result.rows.length === 0) { return res.status(404).json({ error: "Spiel nicht gefunden" }); } return res.json({ message: "Spiel erfolgreich aktualisiert", spiel: result.rows[0], }); } else { // **Neues Spiel anlegen** → Nur `name` ist erforderlich if (!name) { return res .status(400) .json({ error: "Der Name des Spiels ist erforderlich" }); } result = await pool.query( `INSERT INTO spiele (name) VALUES ($1) RETURNING *`, [name] ); return res .status(201) .json({ message: "Spiel erfolgreich angelegt", spiel: result.rows[0] }); } } catch (err) { console.error(err); res.status(500).json({ error: "Interner Serverfehler" }); } }); module.exports = router;