From 9ae1d821660b6faca63aaab0a9aa7d8394275986 Mon Sep 17 00:00:00 2001 From: Server Date: Tue, 29 Apr 2025 13:17:32 +0200 Subject: [PATCH] Erweiterung API Spielerverwaltung --- index.js | 201 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 171 insertions(+), 30 deletions(-) diff --git a/index.js b/index.js index d94aba1..afd1d4a 100644 --- a/index.js +++ b/index.js @@ -314,14 +314,21 @@ app.get("/api/teams", async (req, res) => { t.id, t.name, t.liga, - t.spieler_gesucht, + t.sucht_spieler, t.social_media, - t.trainer, - t.carousel_images, + t.trainer_name, + t.karussell_bilder, -- 👉 Hier angepasst! COUNT(pt.player_id) AS player_count FROM teams t LEFT JOIN player_teams pt ON pt.team_id = t.id - GROUP BY t.id, t.liga, t.spieler_gesucht, t.social_media, t.trainer, t.carousel_images + GROUP BY + t.id, + t.name, + t.liga, + t.sucht_spieler, + t.social_media, + t.trainer_name, + t.karussell_bilder -- 👉 Hier auch ORDER BY t.name ASC `); res.json(result.rows); @@ -332,21 +339,64 @@ app.get("/api/teams", async (req, res) => { }); - -//Update Team +// Team aktualisieren app.put("/api/teams/:id", async (req, res) => { - const { name, liga, spieler_gesucht, social_media, trainer, carousel_images } = req.body; const { id } = req.params; + const { + name, + liga, + sucht_spieler, + social_media, + karussell_bilder, + trainer_name, + trainingszeiten, + trainingsort, + kontakt_name, + kontakt_email, + teamfarben, + beschreibung, + tabellenlink + } = req.body; try { const result = await pool.query( - `UPDATE teams - SET name = $1, liga = $2, spieler_gesucht = $3, social_media = $4, trainer = $5, carousel_images = $6 - WHERE id = $7 RETURNING *`, - [name, liga, spieler_gesucht, social_media, trainer, carousel_images, id] + `UPDATE teams SET + name = $1, + liga = $2, + sucht_spieler = $3, + social_media = $4, + karussell_bilder = $5, + trainer_name = $6, + trainingszeiten = $7, + trainingsort = $8, + kontakt_name = $9, + kontakt_email = $10, + teamfarben = $11, + beschreibung = $12, + tabellenlink = $13 + WHERE id = $14 + RETURNING *`, + [ + name, + liga, + sucht_spieler, + social_media, + karussell_bilder, + trainer_name, + trainingszeiten, + trainingsort, + kontakt_name, + kontakt_email, + teamfarben, + beschreibung, + tabellenlink, + id + ] ); - if (result.rowCount === 0) return res.status(404).send("Team nicht gefunden"); + if (result.rowCount === 0) { + return res.status(404).send("Team nicht gefunden"); + } res.json(result.rows[0]); } catch (err) { @@ -360,23 +410,55 @@ app.put("/api/teams/:id", async (req, res) => { //Teams anlegen - app.post("/api/teams", async (req, res) => { - const { name, liga, spieler_gesucht, social_media, trainer, carousel_images } = req.body; + const { + name, + liga, + sucht_spieler, + social_media, + karussell_bilder, + trainer_name, + trainingszeiten, + trainingsort, + kontakt_name, + kontakt_email, + teamfarben, + beschreibung, + tabellenlink + } = req.body; if (!name) return res.status(400).send("Teamname ist erforderlich"); try { const result = await pool.query( - `INSERT INTO teams (name, liga, spieler_gesucht, social_media, trainer, carousel_images) - VALUES ($1, $2, $3, $4, $5, $6) RETURNING *`, - [name, liga, spieler_gesucht, social_media, trainer, carousel_images] + `INSERT INTO teams ( + name, liga, sucht_spieler, social_media, karussell_bilder, + trainer_name, trainingszeiten, trainingsort, kontakt_name, + kontakt_email, teamfarben, beschreibung, tabellenlink + ) VALUES ( + $1, $2, $3, $4, $5, + $6, $7, $8, $9, + $10, $11, $12, $13 + ) RETURNING *`, + [ + name, + liga, + sucht_spieler, + social_media, + karussell_bilder, + trainer_name, + trainingszeiten, + trainingsort, + kontakt_name, + kontakt_email, + teamfarben, + beschreibung, + tabellenlink + ] ); + res.status(201).json(result.rows[0]); } catch (err) { - if (err.code === "23505") { - return res.status(400).send("Ein Team mit diesem Namen existiert bereits"); - } console.error("Fehler beim Anlegen des Teams:", err); res.status(500).send("Fehler beim Anlegen des Teams"); } @@ -385,7 +467,6 @@ app.post("/api/teams", async (req, res) => { //Team loeschen - app.delete("/api/teams/:id", async (req, res) => { const { id } = req.params; @@ -441,16 +522,30 @@ app.post("/api/players", async (req, res) => { }); -//Einzelnes Team + Spieler laden - -// Einzelnes Team + Spieler laden +// Einzelnes Team inkl. Metadaten + Spieler laden app.get("/api/teams/:id", async (req, res) => { const { id } = req.params; try { // Team-Daten holen const teamResult = await pool.query( - "SELECT id, name FROM teams WHERE id = $1", + `SELECT + id, + name, + liga, + sucht_spieler, + social_media, + trainer_name, + karussell_bilder, + trainingszeiten, + trainingsort, + kontakt_name, + kontakt_email, + teamfarben, + beschreibung, + tabellenlink + FROM teams + WHERE id = $1`, [id] ); @@ -460,7 +555,13 @@ app.get("/api/teams/:id", async (req, res) => { // Spieler für dieses Team holen const playerResult = await pool.query(` - SELECT p.id, p.name, p.nickname, p.position, p.jersey_number, p.image_url + SELECT + p.id, + p.name, + p.nickname, + p.position, + p.jersey_number, + p.image_url FROM players p INNER JOIN player_teams pt ON p.id = pt.player_id WHERE pt.team_id = $1 @@ -468,8 +569,7 @@ app.get("/api/teams/:id", async (req, res) => { `, [id]); res.json({ - id: teamResult.rows[0].id, - name: teamResult.rows[0].name, + ...teamResult.rows[0], players: playerResult.rows, }); } catch (err) { @@ -479,6 +579,8 @@ app.get("/api/teams/:id", async (req, res) => { }); + + //Alle Spieler abrufen app.get("/api/players", async (req, res) => { try { @@ -560,7 +662,6 @@ app.put("/api/players/:id", async (req, res) => { //Einzelnen Spieler abrufen -// Einzelnen Spieler abrufen app.get("/api/players/:id", async (req, res) => { const { id } = req.params; @@ -574,7 +675,17 @@ app.get("/api/players/:id", async (req, res) => { return res.status(404).send("Spieler nicht gefunden"); } - res.json(result.rows[0]); + const player = result.rows[0]; + + // 🔥 Team-IDs abfragen + const teamResult = await pool.query( + "SELECT team_id FROM player_teams WHERE player_id = $1", + [id] + ); + + const team_ids = teamResult.rows.map(r => r.team_id); + + res.json({ ...player, team_ids }); } catch (err) { console.error("Fehler beim Abrufen des Spielers:", err); res.status(500).send("Fehler beim Abrufen des Spielers"); @@ -582,6 +693,7 @@ app.get("/api/players/:id", async (req, res) => { }); + // Spieler aus einem Team entfernen app.delete("/api/teams/:teamId/players/:playerId", async (req, res) => { const { teamId, playerId } = req.params; @@ -629,6 +741,35 @@ app.post("/api/teams/:teamId/players", async (req, res) => { }); +// Alle Teams abrufen +app.get("/api/all-teams", async (req, res) => { + try { + const result = await pool.query("SELECT id, name FROM teams ORDER BY name ASC"); + res.json(result.rows); + } catch (err) { + console.error("Fehler beim Laden der Teams:", err); + res.status(500).send("Fehler beim Laden der Teams"); + } +}); + +//Spieler einem Team zuweisen +app.post("/api/players/:id/assign-team", async (req, res) => { + const { id } = req.params; + const { team_id } = req.body; + + if (!team_id) return res.status(400).send("team_id erforderlich"); + + try { + await pool.query("DELETE FROM player_teams WHERE player_id = $1", [id]); + await pool.query("INSERT INTO player_teams (player_id, team_id) VALUES ($1, $2)", [id, team_id]); + + res.send("Teamzugehörigkeit aktualisiert"); + } catch (err) { + console.error("Fehler beim Aktualisieren der Teamzugehörigkeit:", err); + res.status(500).send("Fehler beim Aktualisieren"); + } +}); +