84 lines
2.6 KiB
JavaScript
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);
|
|
});
|