119 lines
3.3 KiB
JavaScript
119 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, 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;
|