const path = require('path'); const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const { connectDb } = require('./config/db'); const env = require('./config/env'); const authRoutes = require('./routes/authRoutes'); const vendorRoutes = require('./routes/vendorRoutes'); const employeeRoutes = require('./routes/employeeRoutes'); const hrRoutes = require('./routes/hrRoutes'); const safetyRoutes = require('./routes/safetyRoutes'); const dashboardRoutes = require('./routes/dashboardRoutes'); const gateRoutes = require('./routes/gateRoutes'); const managementRoutes = require('./routes/managementRoutes'); const errorHandler = require('./middleware/errorHandler'); const { startExpiryJob } = require('./jobs/expiryJob'); const { ensureSeedUsers } = require('./config/seed'); const app = express(); app.use(helmet()); app.use(cors({ origin: env.frontendUrl })); app.use(express.json({ limit: '2mb' })); app.use(express.urlencoded({ extended: true })); app.use( '/uploads', (_req, res, next) => { res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin'); next(); }, express.static(path.join(__dirname, '..', 'uploads')) ); app.get('/health', (_req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); app.use('/api/auth', authRoutes); app.use('/api/vendors', vendorRoutes); app.use('/api/employees', employeeRoutes); app.use('/api/hr', hrRoutes); app.use('/api/safety', safetyRoutes); app.use('/api/dashboard', dashboardRoutes); app.use('/api/manage', managementRoutes); app.use('/', gateRoutes); app.use(errorHandler); async function boot() { try { await connectDb(); await ensureSeedUsers(); app.listen(env.PORT, '0.0.0.0', () => { console.log(`Backend listening on port ${env.port}`); startExpiryJob(); }); } catch (error) { console.error('Failed to start backend', error); process.exit(1); } } boot();