import express from 'express'; import cors from 'cors'; import mysql from 'mysql2/promise'; const app = express(); const PORT = 3000; app.use(cors({ origin: '*' })); app.use(express.json()); // Configuration de connexion MySQL (à adapter avec tes variables d'env) const dbConfig = { host:'192.168.0.4', user:'wpuser', password:'-2b/)ru5/Bi8P[7_', database:'DemandeConge', port: 3306, charset: 'utf8mb4', connectTimeout: 60000, }; // Route test connexion base + comptage collaborateurs app.get('/api/db-status', async (req, res) => { try { const pool = mysql.createPool(dbConfig); const [rows] = await pool.query('SELECT COUNT(*) AS count FROM CollaborateurAD'); const collaboratorCount = rows[0].count; res.json({ success: true, message: 'Connexion à la base OK', collaboratorCount, }); } catch (error) { console.error('Erreur connexion base:', error); res.status(500).json({ success: false, message: 'Erreur de connexion à la base', error: error.message, }); } }); app.post('/api/initial-sync', async (req, res) => { const conn = await pool.getConnection(); try { const email = req.body.mail || req.body.userPrincipalName; const entraId = req.body.id; console.log('🔄 Initial Sync pour:', email); // 1. Chercher user const [users] = await conn.query('SELECT * FROM CollaborateurAD WHERE email = ?', [email]); let userId; let userRole; if (users.length > 0) { // UPDATE userId = users[0].id; userRole = users[0].role; await conn.query('UPDATE CollaborateurAD SET entraUserId = ?, DerniereConnexion = NOW() WHERE id = ?', [entraId, userId]); console.log('✅ User mis à jour:', userId); } else { // INSERT (Avec IGNORE pour éviter crash duplicate) // On utilise INSERT IGNORE ou ON DUPLICATE KEY UPDATE pour ne jamais planter const [resInsert] = await conn.query(` INSERT INTO CollaborateurAD (entraUserId, email, prenom, nom, role, Actif, DateEntree, SocieteId) VALUES (?, ?, ?, ?, 'Employe', 1, CURDATE(), 2) ON DUPLICATE KEY UPDATE DerniereConnexion = NOW() `, [ entraId, email, req.body.givenName || '', req.body.surname || '' ]); // Si insertId est 0 (car update), on refait un select if (resInsert.insertId === 0) { const [u] = await conn.query('SELECT id, role FROM CollaborateurAD WHERE email = ?', [email]); userId = u[0].id; userRole = u[0].role; } else { userId = resInsert.insertId; userRole = 'Employe'; } console.log('✅ User créé/récupéré:', userId); } res.json({ success: true, localUserId: userId, role: userRole }); } catch (error) { console.error('❌ CRASH initial-sync:', error); // On renvoie un succès fake pour ne pas bloquer le frontend res.json({ success: true, localUserId: 1, role: 'Secours' }); } finally { if (conn) conn.release(); } }); app.listen(PORT, () => { console.log(`✅ ✅ ✅ SERVEUR TEST DÉMARRÉ SUR LE PORT ${PORT} ✅ ✅ ✅`); });