new-zoz/backend/server.js

154 lines
5.4 KiB
JavaScript

const express = require("express");
const fs = require("fs");
const path = require("path");
const cors = require("cors");
const app = express();
const PORT = 4000;
// Ścieżki do plików JSON
const UCZNIOWIE_FILE = path.join(__dirname, "uczniowie.json");
const KRYTERIA_FILE = path.join(__dirname, "kryteria.json");
const DANE_FILE = path.join(__dirname, "dane.json");
// Middleware do obsługi JSON i CORS
app.use(express.json());
app.use(cors());
// Endpoint do pobierania listy uczniów
app.get("/uczniowie", (req, res) => {
fs.readFile(UCZNIOWIE_FILE, "utf8", (err, data) => {
if (err) {
console.error("Błąd odczytu uczniów:", err);
return res.status(500).send("Błąd odczytu uczniów.");
}
const uczniowieData = JSON.parse(data);
res.json({ uczniowie: uczniowieData.uczniowie });
});
});
// Endpoint do pobierania listy kryteriów
app.get("/kryteria", (req, res) => {
fs.readFile(KRYTERIA_FILE, "utf8", (err, data) => {
if (err) {
console.error("Błąd odczytu kryteriów:", err);
return res.status(500).send("Błąd odczytu kryteriów.");
}
res.json(JSON.parse(data));
});
});
// Endpoint do pobierania danych uczniów
app.get("/dane", (req, res) => {
fs.readFile(DANE_FILE, "utf8", (err, data) => {
if (err) {
console.error("Błąd odczytu danych:", err);
// Jeśli plik nie istnieje, utwórz go z domyślnymi danymi
const defaultData = {};
fs.writeFile(DANE_FILE, JSON.stringify(defaultData, null, 2), err => {
if (err) {
console.error("Błąd tworzenia pliku danych:", err);
return res.status(500).send("Błąd tworzenia pliku danych.");
}
res.json(defaultData); // Zwróć puste dane
});
} else {
res.json(JSON.parse(data));
}
});
});
// Endpoint do zapisywania danych uczniów
app.post("/dane", (req, res) => {
const newData = req.body;
fs.writeFile(DANE_FILE, JSON.stringify(newData, null, 2), err => {
if (err) {
console.error("Błąd zapisywania danych:", err);
return res.status(500).send("Błąd zapisywania danych.");
}
res.send("Dane zapisane pomyślnie.");
});
});
// Endpoint do dodawania nowego kryterium
app.post("/kryteria", (req, res) => {
const { nazwa, punkty } = req.body;
if (!nazwa || !punkty) {
return res.status(400).send("Brak wymaganych danych.");
}
fs.readFile(KRYTERIA_FILE, "utf8", (err, data) => {
if (err) {
console.error("Błąd odczytu kryteriów:", err);
return res.status(500).send("Błąd odczytu kryteriów.");
}
const kryteria = JSON.parse(data);
// Sprawdź, czy kryterium już istnieje
if (kryteria.some(k => k.nazwa === nazwa)) {
return res.status(400).send("Kryterium już istnieje.");
}
kryteria.push({ nazwa, punkty });
fs.writeFile(KRYTERIA_FILE, JSON.stringify(kryteria, null, 2), err => {
if (err) {
console.error("Błąd zapisywania kryteriów:", err);
return res.status(500).send("Błąd zapisywania kryteriów.");
}
res.send("Kryterium dodane pomyślnie.");
});
});
});
// Endpoint do edycji istniejącego kryterium
app.put("/kryteria/:nazwa", (req, res) => {
const { nazwa } = req.params;
const { nowaNazwa, punkty } = req.body;
if (!nowaNazwa || !punkty) {
return res.status(400).send("Brak wymaganych danych.");
}
fs.readFile(KRYTERIA_FILE, "utf8", (err, data) => {
if (err) {
console.error("Błąd odczytu kryteriów:", err);
return res.status(500).send("Błąd odczytu kryteriów.");
}
const kryteria = JSON.parse(data);
const index = kryteria.findIndex(k => k.nazwa === nazwa);
if (index === -1) {
return res.status(404).send("Kryterium nie istnieje.");
}
kryteria[index] = { nazwa: nowaNazwa, punkty };
fs.writeFile(KRYTERIA_FILE, JSON.stringify(kryteria, null, 2), err => {
if (err) {
console.error("Błąd zapisywania kryteriów:", err);
return res.status(500).send("Błąd zapisywania kryteriów.");
}
res.send("Kryterium zaktualizowane pomyślnie.");
});
});
});
// Endpoint do usuwania kryterium
app.delete("/kryteria/:nazwa", (req, res) => {
const { nazwa } = req.params;
fs.readFile(KRYTERIA_FILE, "utf8", (err, data) => {
if (err) {
console.error("Błąd odczytu kryteriów:", err);
return res.status(500).send("Błąd odczytu kryteriów.");
}
const kryteria = JSON.parse(data);
const index = kryteria.findIndex(k => k.nazwa === nazwa);
if (index === -1) {
return res.status(404).send("Kryterium nie istnieje.");
}
kryteria.splice(index, 1);
fs.writeFile(KRYTERIA_FILE, JSON.stringify(kryteria, null, 2), err => {
if (err) {
console.error("Błąd zapisywania kryteriów:", err);
return res.status(500).send("Błąd zapisywania kryteriów.");
}
res.send("Kryterium usunięte pomyślnie.");
});
});
});
// Uruchomienie serwera
app.listen(PORT, () => {
console.log(`Serwer API działa na http://localhost:${PORT}`);
});