Erweiterung API Spielerverwaltung
This commit is contained in:
parent
ea65d54892
commit
9ae1d82166
201
index.js
201
index.js
@ -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 {
|
||||||
@ -559,7 +661,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");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user