tkd-api/routes/spiele.js

120 lines
3.3 KiB
JavaScript

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;