54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
const path = require("path");
|
|
const express = require("express");
|
|
const cors = require("cors");
|
|
const { connect } = require("./db");
|
|
|
|
const peopleRouter = require("./routes/people");
|
|
const projectsRouter = require("./routes/projects");
|
|
const tasksRouter = require("./routes/tasks");
|
|
const absencesRouter = require("./routes/absences");
|
|
const capacityRouter = require("./routes/capacity");
|
|
|
|
const app = express();
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
app.get("/api/health", (req, res) => res.json({ status: "ok" }));
|
|
|
|
app.use("/api/people", peopleRouter);
|
|
app.use("/api/projects", projectsRouter);
|
|
app.use("/api/tasks", tasksRouter);
|
|
app.use("/api/absences", absencesRouter);
|
|
app.use("/api/capacity", capacityRouter);
|
|
|
|
// Gebautes Frontend (Vite -> dist) ausliefern
|
|
const frontendDist = path.join(__dirname, "..", "public");
|
|
app.use(express.static(frontendDist));
|
|
|
|
// SPA-Fallback: alles, was nicht /api ist, liefert die index.html aus
|
|
app.get(/^(?!\/api).*/, (req, res) => {
|
|
res.sendFile(path.join(frontendDist, "index.html"));
|
|
});
|
|
|
|
app.use((err, req, res, next) => {
|
|
console.error(err);
|
|
res.status(500).json({ error: "Interner Serverfehler" });
|
|
});
|
|
|
|
async function start() {
|
|
try {
|
|
await connect();
|
|
app.listen(PORT, () => {
|
|
console.log(`Jahresplanung-Server laeuft auf Port ${PORT}`);
|
|
});
|
|
} catch (err) {
|
|
console.error("Konnte keine Verbindung zu MongoDB herstellen:", err);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
start();
|
|
|