import express from 'express'; import cors from 'cors'; import apiRoutes from './routes/apiRoutes.js'; import corsOptions from './config/cors.js' import {apiKeyMiddleware} from './middleware/apiKeyMiddleware.js'; import dotenv from 'dotenv'; import cookieParser from 'cookie-parser'; import pool from "./config/db.js"; import * as path from "node:path"; import { fileURLToPath } from 'url'; const envFile = `.env`; dotenv.config({ path: path.resolve(process.cwd(), envFile), override: true }); const app = express(); // Utiliser CORS app.use(cors(corsOptions)); // Utilisation des cookies app.use(cookieParser()); // Middleware pour parser les corps de requêtes JSON app.use(express.json()); // Utilisation des fichiers/images const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); app.use('/uploads', express.static(path.join(__dirname, 'uploads'))); // Middleware pour vérifier la clé API (Authorization) app.use('/', apiKeyMiddleware); // Utiliser les routes API app.use('/', apiRoutes); // Middleware pour les routes non trouvées app.use((req, res) => { res.status(404).json({ message: 'Forbidden: Invalid Request', status: false }); }); // Test de conenxion à la base de donnée const testDatabaseConnection = async () => { let conn; try { conn = await pool.getConnection(); console.log('✅ Connexion à la base de données réussie ! 🎉'); } catch (err) { console.error('❌ Erreur de connexion à la base de données :', err.message); throw new Error('⛔ Impossible de se connecter à la base de données.'); } finally { if (conn) await conn.end(); } }; // Lancer le serveur const startServer = async () => { while (true) { try { console.log(`🚀 Lancement de l'API en cours... 🔧`); await testDatabaseConnection(); app.listen(process.env.PORT, () => { console.log(`📢 Chargement du fichier : ${envFile} 📄`); console.log(`🚀 API démarrée sur le port ${process.env.PORT} 🎯`); console.log(`🌍 Allowed Origin : ${process.env.ALLOWED_ORIGIN} 🔗`); console.log(`✅ L'API est lancée et prête à l'emploi ! 🎉`); }); break; } catch (err) { console.error('❌ Le serveur n’a pas pu démarrer :', err.message); console.log('⏳ Nouvelle tentative de démarrage dans 5 secondes... 🔄'); await new Promise((resolve) => setTimeout(resolve, 5000)); } } }; startServer();