/** * Datacenter Designer Server * Express application with modular routes */ const express = require('express'); const path = require('path'); const config = require('./config'); const db = require('./db'); const { errorHandler, notFoundHandler } = require('./lib/errorHandler'); // Import route modules const projectsRouter = require('./routes/projects'); const racksRouter = require('./routes/racks'); const devicesRouter = require('./routes/devices'); const connectionsRouter = require('./routes/connections'); // Initialize Express app const app = express(); // Middleware app.use(express.json({ limit: config.api.jsonLimit })); app.use(express.static(path.join(__dirname, '../public'))); // Optional: Request logging (development) if (config.logging.enabled && config.server.env === 'development') { app.use((req, res, next) => { console.log(`${req.method} ${req.path}`); next(); }); } // API Routes app.use('/api/projects', projectsRouter); app.use('/api/racks', racksRouter); app.use('/api/devices', devicesRouter); app.use('/api/device-types', devicesRouter); // Mounted under /devices/types app.use('/api/connections', connectionsRouter); // Health check endpoint app.get('/api/health', (req, res) => { const stats = db.getStats(); res.json({ status: 'ok', version: '1.0.0', database: stats }); }); // 404 handler - must be after all other routes app.use(notFoundHandler); // Error handler - must be last app.use(errorHandler); // Initialize database and start server db.init(); app.listen(config.server.port, () => { console.log(` ╔═══════════════════════════════════════════════════════════╗ ║ ║ ║ Datacenter Designer Server ║ ║ ║ ║ Running on: http://${config.server.host}:${config.server.port} ║ ║ Environment: ${config.server.env} ║ ║ ║ ╚═══════════════════════════════════════════════════════════╝ `); }); // Graceful shutdown process.on('SIGTERM', () => { console.log('SIGTERM signal received: closing HTTP server'); db.close(); process.exit(0); }); process.on('SIGINT', () => { console.log('SIGINT signal received: closing HTTP server'); db.close(); process.exit(0); });