Erweiterung API Spielerverwaltung

This commit is contained in:
Server 2025-04-29 13:17:32 +02:00
parent ea65d54892
commit 9ae1d82166

201
index.js
View File

@ -314,14 +314,21 @@ app.get("/api/teams", async (req, res) => {
t.id, t.id,
t.name, t.name,
t.liga, t.liga,
t.spieler_gesucht, t.sucht_spieler,
t.social_media, t.social_media,
t.trainer, t.trainer_name,
t.carousel_images, t.karussell_bilder, -- 👉 Hier angepasst!
COUNT(pt.player_id) AS player_count COUNT(pt.player_id) AS player_count
FROM teams t FROM teams t
LEFT JOIN player_teams pt ON pt.team_id = t.id 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 ORDER BY t.name ASC
`); `);
res.json(result.rows); res.json(result.rows);
@ -332,21 +339,64 @@ app.get("/api/teams", async (req, res) => {
}); });
// Team aktualisieren
//Update Team
app.put("/api/teams/:id", async (req, res) => { 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 { 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 { try {
const result = await pool.query( const result = await pool.query(
`UPDATE teams `UPDATE teams SET
SET name = $1, liga = $2, spieler_gesucht = $3, social_media = $4, trainer = $5, carousel_images = $6 name = $1,
WHERE id = $7 RETURNING *`, liga = $2,
[name, liga, spieler_gesucht, social_media, trainer, carousel_images, id] 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]); res.json(result.rows[0]);
} catch (err) { } catch (err) {
@ -360,23 +410,55 @@ app.put("/api/teams/:id", async (req, res) => {
//Teams anlegen //Teams anlegen
app.post("/api/teams", async (req, res) => { 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"); if (!name) return res.status(400).send("Teamname ist erforderlich");
try { try {
const result = await pool.query( const result = await pool.query(
`INSERT INTO teams (name, liga, spieler_gesucht, social_media, trainer, carousel_images) `INSERT INTO teams (
VALUES ($1, $2, $3, $4, $5, $6) RETURNING *`, name, liga, sucht_spieler, social_media, karussell_bilder,
[name, liga, spieler_gesucht, social_media, trainer, carousel_images] 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]); res.status(201).json(result.rows[0]);
} catch (err) { } 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); console.error("Fehler beim Anlegen des Teams:", err);
res.status(500).send("Fehler beim Anlegen des Teams"); res.status(500).send("Fehler beim Anlegen des Teams");
} }
@ -385,7 +467,6 @@ app.post("/api/teams", async (req, res) => {
//Team loeschen //Team loeschen
app.delete("/api/teams/:id", async (req, res) => { app.delete("/api/teams/:id", async (req, res) => {
const { id } = req.params; const { id } = req.params;
@ -441,16 +522,30 @@ app.post("/api/players", async (req, res) => {
}); });
//Einzelnes Team + Spieler laden // Einzelnes Team inkl. Metadaten + Spieler laden
// Einzelnes Team + Spieler laden
app.get("/api/teams/:id", async (req, res) => { app.get("/api/teams/:id", async (req, res) => {
const { id } = req.params; const { id } = req.params;
try { try {
// Team-Daten holen // Team-Daten holen
const teamResult = await pool.query( 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] [id]
); );
@ -460,7 +555,13 @@ app.get("/api/teams/:id", async (req, res) => {
// Spieler für dieses Team holen // Spieler für dieses Team holen
const playerResult = await pool.query(` 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 FROM players p
INNER JOIN player_teams pt ON p.id = pt.player_id INNER JOIN player_teams pt ON p.id = pt.player_id
WHERE pt.team_id = $1 WHERE pt.team_id = $1
@ -468,8 +569,7 @@ app.get("/api/teams/:id", async (req, res) => {
`, [id]); `, [id]);
res.json({ res.json({
id: teamResult.rows[0].id, ...teamResult.rows[0],
name: teamResult.rows[0].name,
players: playerResult.rows, players: playerResult.rows,
}); });
} catch (err) { } catch (err) {
@ -479,6 +579,8 @@ app.get("/api/teams/:id", async (req, res) => {
}); });
//Alle Spieler abrufen //Alle Spieler abrufen
app.get("/api/players", async (req, res) => { app.get("/api/players", async (req, res) => {
try { try {
@ -560,7 +662,6 @@ app.put("/api/players/:id", async (req, res) => {
//Einzelnen Spieler abrufen //Einzelnen Spieler abrufen
// Einzelnen Spieler abrufen
app.get("/api/players/:id", async (req, res) => { app.get("/api/players/:id", async (req, res) => {
const { id } = req.params; const { id } = req.params;
@ -574,7 +675,17 @@ app.get("/api/players/:id", async (req, res) => {
return res.status(404).send("Spieler nicht gefunden"); 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) { } catch (err) {
console.error("Fehler beim Abrufen des Spielers:", err); console.error("Fehler beim Abrufen des Spielers:", err);
res.status(500).send("Fehler beim Abrufen des Spielers"); 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 // Spieler aus einem Team entfernen
app.delete("/api/teams/:teamId/players/:playerId", async (req, res) => { app.delete("/api/teams/:teamId/players/:playerId", async (req, res) => {
const { teamId, playerId } = req.params; 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");
}
});