Neuste Aenderungen vom Server
This commit is contained in:
parent
3e1995e0cf
commit
7b4a5a5e38
136
index.js
136
index.js
@ -263,7 +263,7 @@ app.put("/api/users/:id", async (req, res) => {
|
|||||||
|
|
||||||
|
|
||||||
// Speicherort definieren
|
// Speicherort definieren
|
||||||
const storage = multer.diskStorage({
|
const newsStorage = multer.diskStorage({
|
||||||
destination: (req, file, cb) => {
|
destination: (req, file, cb) => {
|
||||||
const dir = "./uploads/news";
|
const dir = "./uploads/news";
|
||||||
fs.mkdirSync(dir, { recursive: true });
|
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
|
//Neues Bild zu den News hinzufügen
|
||||||
app.post("/api/upload-news-image", upload.single("image"), (req, res) => {
|
app.post("/api/upload-news-image", upload.single("image"), (req, res) => {
|
||||||
@ -295,20 +313,21 @@ app.get("/api/teams", async (req, res) => {
|
|||||||
SELECT
|
SELECT
|
||||||
t.id,
|
t.id,
|
||||||
t.name,
|
t.name,
|
||||||
COUNT(p.id) AS player_count
|
COUNT(pt.player_id) AS player_count
|
||||||
FROM teams t
|
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
|
GROUP BY t.id
|
||||||
ORDER BY t.name ASC
|
ORDER BY t.name ASC
|
||||||
`);
|
`);
|
||||||
res.json(result.rows);
|
res.json(result.rows);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("Fehler beim Laden der Teams:", err);
|
console.error(err);
|
||||||
res.status(500).send("Fehler beim Abrufen der Teams");
|
res.status(500).send("Fehler beim Abrufen der Teams");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Teams anlegen
|
//Teams anlegen
|
||||||
|
|
||||||
app.post("/api/teams", async (req, res) => {
|
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]);
|
res.status(201).json(result.rows[0]);
|
||||||
} catch (err) {
|
} 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);
|
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");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//Team löschen
|
|
||||||
|
|
||||||
|
//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;
|
||||||
@ -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
|
// Server starten
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
const nets = os.networkInterfaces();
|
const nets = os.networkInterfaces();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user