medienkompetenz-lernplattform/backend/src/index.js
2026-02-05 22:42:30 +01:00

107 lines
2.6 KiB
JavaScript

const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
const config = require('./config/environment');
const { pool } = require('./config/database');
const { errorHandler, notFoundHandler } = require('./middleware/errorHandler');
// Import routes
const participantRoutes = require('./routes/participant.routes');
const adminRoutes = require('./routes/admin.routes');
const lessonRoutes = require('./routes/lesson.routes');
// Initialize Express app
const app = express();
// Security middleware
app.use(helmet());
// CORS configuration
app.use(cors({
origin: config.corsOrigin,
credentials: true
}));
// Body parsing middleware
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
// Logging middleware
if (config.nodeEnv === 'development') {
app.use(morgan('dev'));
} else {
app.use(morgan('combined'));
}
// Health check endpoint
app.get('/health', async (req, res) => {
try {
// Check database connection
await pool.query('SELECT 1');
res.status(200).json({
status: 'healthy',
timestamp: new Date().toISOString(),
environment: config.nodeEnv,
database: 'connected'
});
} catch (error) {
res.status(503).json({
status: 'unhealthy',
timestamp: new Date().toISOString(),
environment: config.nodeEnv,
database: 'disconnected',
error: error.message
});
}
});
// API routes
app.get('/api', (req, res) => {
res.json({
message: 'Security Awareness Learning Platform API',
version: '1.0.0',
endpoints: {
participant: '/api/participant',
admin: '/api/admin',
lessons: '/api/lessons'
}
});
});
// Mount routes
app.use('/api/participant', participantRoutes);
app.use('/api/admin', adminRoutes);
app.use('/api/lesson', lessonRoutes);
// 404 handler
app.use(notFoundHandler);
// Error handling middleware
app.use(errorHandler);
// Start server
const PORT = config.port;
app.listen(PORT, () => {
console.log(`
========================================
Security Awareness Learning Platform
========================================
Environment: ${config.nodeEnv}
Server running on port: ${PORT}
Database: ${config.database.host}:${config.database.port}/${config.database.name}
========================================
`);
});
// Graceful shutdown
process.on('SIGTERM', () => {
console.log('SIGTERM signal received: closing HTTP server');
pool.end(() => {
console.log('Database pool closed');
process.exit(0);
});
});
module.exports = app;