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.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 {
|
||||
@ -559,7 +661,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");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user