Files
datacenter-designer/server/server.js
Stefano Manfredi 3431a121a9 First commit
2025-10-27 11:57:38 +00:00

84 lines
2.6 KiB
JavaScript

/**
* 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);
});