// server.js const express = require('express'); const cors = require('cors'); const app = express(); const swaggerUi = require('swagger-ui-express'); const swaggerJsdoc = require('swagger-jsdoc'); const config = require('./src/config'); const DatabaseManager = require('./src/models/database'); // Middleware pour gérer les requêtes JSON app.use(express.json()); // Configuration CORS app.use(cors(config.server.cors)); // Initialisation de la base de données DatabaseManager.initialize() .then(() => console.log('[SERVER] Base de données initialisée avec succès')) .catch(err => console.error('[SERVER] Erreur d\'initialisation de la base de données:', err)); // Importer les routes API const apiRoutes = require('./src/routes'); app.use('/api', apiRoutes); // Configuration de Swagger const swaggerOptions = { definition: config.swagger.definition, apis: config.swagger.apis }; // Initialisation de swagger-jsdoc const swaggerDocs = swaggerJsdoc(swaggerOptions); // Route Swagger UI app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs)); // Route de base pour tester le serveur app.get('/', (req, res) => { res.send('Bienvenue sur l\'API Timelapse!'); }); // Gestion des erreurs 404 app.use((req, res) => { res.status(404).json({ error: { message: 'Route non trouvée', path: req.path, method: req.method, statusCode: 404 } }); }); // Gestion des erreurs globales app.use((err, req, res, next) => { console.error('[SERVER] Erreur non gérée:', err); res.status(500).json({ error: { message: 'Erreur serveur interne', statusCode: 500, details: process.env.NODE_ENV === 'production' ? undefined : err.message } }); }); // Démarrer le serveur const port = config.server.port; app.listen(port, () => { console.log(`[SERVER] Serveur démarré sur http://localhost:${port}`); console.log(`[SERVER] Documentation Swagger disponible sur http://localhost:${port}/api-docs`); });