This commit is contained in:
simon.franken
2026-02-16 16:09:07 +01:00
parent d200254783
commit a9228d19c8
8 changed files with 226 additions and 105 deletions

View File

@@ -1,16 +1,16 @@
import express from 'express';
import cors from 'cors';
import session from 'express-session';
import { config, validateConfig } from './config';
import { connectDatabase } from './prisma/client';
import { errorHandler, notFoundHandler } from './middleware/errorHandler';
import express from "express";
import cors from "cors";
import session from "express-session";
import { config, validateConfig } from "./config";
import { connectDatabase } from "./prisma/client";
import { errorHandler, notFoundHandler } from "./middleware/errorHandler";
// Import routes
import authRoutes from './routes/auth.routes';
import clientRoutes from './routes/client.routes';
import projectRoutes from './routes/project.routes';
import timeEntryRoutes from './routes/timeEntry.routes';
import timerRoutes from './routes/timer.routes';
import authRoutes from "./routes/auth.routes";
import clientRoutes from "./routes/client.routes";
import projectRoutes from "./routes/project.routes";
import timeEntryRoutes from "./routes/timeEntry.routes";
import timerRoutes from "./routes/timer.routes";
async function main() {
// Validate configuration
@@ -22,40 +22,44 @@ async function main() {
const app = express();
// CORS
app.use(cors({
origin: config.cors.origin,
credentials: true,
}));
app.use(
cors({
origin: config.cors.origin,
credentials: true,
}),
);
// Body parsing
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Session
app.use(session({
secret: config.session.secret,
resave: false,
saveUninitialized: false,
name: 'sessionId',
cookie: {
secure: config.nodeEnv === 'production',
httpOnly: true,
maxAge: config.session.maxAge,
sameSite: config.nodeEnv === 'production' ? 'strict' : 'lax',
},
}));
app.use(
session({
secret: config.session.secret,
resave: false,
saveUninitialized: false,
name: "sessionId",
cookie: {
secure: false,
httpOnly: false,
maxAge: config.session.maxAge,
sameSite: "lax",
},
}),
);
// Health check
app.get('/health', (_req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
app.get("/health", (_req, res) => {
res.json({ status: "ok", timestamp: new Date().toISOString() });
});
// Routes
app.use('/auth', authRoutes);
app.use('/api/clients', clientRoutes);
app.use('/api/projects', projectRoutes);
app.use('/api/time-entries', timeEntryRoutes);
app.use('/api/timer', timerRoutes);
app.use("/api/auth", authRoutes);
app.use("/api/clients", clientRoutes);
app.use("/api/projects", projectRoutes);
app.use("/api/time-entries", timeEntryRoutes);
app.use("/api/timer", timerRoutes);
// Error handling
app.use(notFoundHandler);
@@ -69,6 +73,6 @@ async function main() {
}
main().catch((error) => {
console.error('Failed to start server:', error);
console.error("Failed to start server:", error);
process.exit(1);
});
});