Files
GTA/project/public/Backend/server-test.js
2025-11-28 16:55:45 +01:00

112 lines
3.5 KiB
JavaScript

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} ✅ ✅ ✅`);
});