Neuste Aenderungen vom Server

This commit is contained in:
Marc 2025-04-28 16:18:54 +00:00
parent 3e1995e0cf
commit 7b4a5a5e38

136
index.js
View File

@ -263,7 +263,7 @@ app.put("/api/users/:id", async (req, res) => {
// Speicherort definieren
const storage = multer.diskStorage({
const newsStorage = multer.diskStorage({
destination: (req, file, cb) => {
const dir = "./uploads/news";
fs.mkdirSync(dir, { recursive: true });
@ -276,7 +276,25 @@ const storage = multer.diskStorage({
},
});
const upload = multer({ storage });
const playerStorage = multer.diskStorage({
destination: (req, file, cb) => {
const dir = "./uploads/players";
fs.mkdirSync(dir, { recursive: true });
cb(null, dir);
},
filename: (req, file, cb) => {
const ext = path.extname(file.originalname);
const filename = Date.now() + ext;
cb(null, filename);
},
});
const uploadNewsImage = multer({ storage: newsStorage });
const uploadPlayerImage = multer({ storage: playerStorage });
//Neues Bild zu den News hinzufügen
app.post("/api/upload-news-image", upload.single("image"), (req, res) => {
@ -295,20 +313,21 @@ app.get("/api/teams", async (req, res) => {
SELECT
t.id,
t.name,
COUNT(p.id) AS player_count
COUNT(pt.player_id) AS player_count
FROM teams t
LEFT JOIN players p ON p.team_id = t.id
LEFT JOIN player_teams pt ON pt.team_id = t.id
GROUP BY t.id
ORDER BY t.name ASC
`);
res.json(result.rows);
} catch (err) {
console.error("Fehler beim Laden der Teams:", err);
console.error(err);
res.status(500).send("Fehler beim Abrufen der Teams");
}
});
//Teams anlegen
app.post("/api/teams", async (req, res) => {
@ -325,12 +344,19 @@ app.post("/api/teams", async (req, res) => {
);
res.status(201).json(result.rows[0]);
} catch (err) {
if (err.code === "23505") {
// 23505 = Unique violation
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");
}
});
//Team löschen
//Team loeschen
app.delete("/api/teams/:id", async (req, res) => {
const { id } = req.params;
@ -350,6 +376,104 @@ app.delete("/api/teams/:id", async (req, res) => {
});
//Spieler anlegen
app.post("/api/players", async (req, res) => {
const { name, nickname, birthdate, position, jersey_number, favorite_food, image_url, status, team_ids } = req.body;
if (!name || !position) {
return res.status(400).send("Name und Position sind Pflichtfelder");
}
const client = await pool.connect();
try {
await client.query("BEGIN");
const result = await client.query(
`INSERT INTO players (name, nickname, birthdate, position, jersey_number, favorite_food, image_url, status)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id`,
[name, nickname, birthdate, position, jersey_number, favorite_food, image_url, status || "aktiv"]
);
const playerId = result.rows[0].id;
if (team_ids && team_ids.length > 0) {
const teamInsert = team_ids.map((teamId) => `(${playerId}, ${teamId})`).join(",");
await client.query(`INSERT INTO player_teams (player_id, team_id) VALUES ${teamInsert}`);
}
await client.query("COMMIT");
res.status(201).json({ id: playerId });
} catch (err) {
await client.query("ROLLBACK");
console.error("Fehler beim Anlegen des Spielers:", err);
res.status(500).send("Fehler beim Anlegen des Spielers");
} finally {
client.release();
}
});
//Einzelnes Team + Spieler laden
// Einzelnes Team + 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",
[id]
);
if (teamResult.rowCount === 0) {
return res.status(404).send("Team nicht gefunden");
}
// Spieler für dieses Team holen
const playerResult = await pool.query(`
SELECT p.id, p.name, p.nickname, p.position, p.jersey_number
FROM players p
INNER JOIN player_teams pt ON p.id = pt.player_id
WHERE pt.team_id = $1
ORDER BY p.name ASC
`, [id]);
res.json({
id: teamResult.rows[0].id,
name: teamResult.rows[0].name,
players: playerResult.rows,
});
} catch (err) {
console.error("Fehler beim Laden des Teams:", err);
res.status(500).send("Fehler beim Laden des Teams");
}
});
//Alle Spieler abrufen
app.get("/api/players", async (req, res) => {
try {
const result = await pool.query("SELECT * FROM players ORDER BY name ASC");
res.json(result.rows);
} catch (err) {
console.error("Fehler beim Abrufen der Spieler:", err);
res.status(500).send("Fehler beim Abrufen der Spieler");
}
});
//Upload Player Image
app.post("/api/upload-player-image", upload.single("image"), (req, res) => {
if (!req.file) {
return res.status(400).send("Kein Bild hochgeladen");
}
const imageUrl = `/uploads/players/${req.file.filename}`;
res.json({ imageUrl });
});
// Server starten
app.listen(port, () => {
const nets = os.networkInterfaces();