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.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");
}
});