158 lines
4.4 KiB
JavaScript
158 lines
4.4 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const sql = require('mssql');
|
|
require('dotenv').config();
|
|
|
|
const app = express();
|
|
const PORT = 3002;
|
|
|
|
// Configuration base de données
|
|
const dbConfig = {
|
|
server: process.env.DB_SERVER,
|
|
database: process.env.DB_DATABASE,
|
|
user: process.env.DB_USER,
|
|
password: process.env.DB_PASSWORD,
|
|
options: {
|
|
encrypt: true,
|
|
trustServerCertificate: true,
|
|
enableArithAbort: true
|
|
}
|
|
};
|
|
|
|
// Middleware
|
|
app.use(cors({
|
|
origin: ['http://localhost:5173', 'http://localhost:5174', 'http://localhost:3000', 'http://127.0.0.1:5173', 'http://127.0.0.1:5174'],
|
|
credentials: true
|
|
}));
|
|
app.use(express.json());
|
|
|
|
// Log de toutes les requêtes
|
|
app.use((req, res, next) => {
|
|
console.log(`${new Date().toISOString()} - ${req.method} ${req.path} depuis ${req.get('origin') || 'inconnu'}`);
|
|
next();
|
|
});
|
|
|
|
// Variable pour stocker la connexion
|
|
let pool = null;
|
|
|
|
// Fonction pour se connecter à la base
|
|
async function connectDatabase() {
|
|
try {
|
|
pool = await sql.connect(dbConfig);
|
|
console.log('Base de données connectée');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Erreur de connexion :', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Route de test
|
|
app.get('/api/test', (req, res) => {
|
|
res.json({
|
|
message: 'Le serveur fonctionne !',
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
});
|
|
|
|
// Route pour tester la base de données
|
|
app.get('/api/db-test', async (req, res) => {
|
|
try {
|
|
if (!pool) {
|
|
return res.status(500).json({ error: 'Base non connectée' });
|
|
}
|
|
|
|
const result = await pool.request().query('SELECT COUNT(*) as total FROM FormateurSqy');
|
|
res.json({
|
|
message: 'Base OK',
|
|
formateurs: result.recordset[0].total
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// Route pour mettre à jour le statut d'une déclaration
|
|
app.put('/api/declarations/:id/status', async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const { status } = req.body;
|
|
|
|
await pool.request()
|
|
.input('id', sql.Int, id)
|
|
.input('status', sql.VarChar, status)
|
|
.query('UPDATE declarations SET status = @status WHERE id = @id');
|
|
|
|
res.json({ success: true, message: 'Statut mis à jour' });
|
|
} catch (error) {
|
|
res.status(500).json({ success: false, error: error.message });
|
|
}
|
|
});
|
|
|
|
|
|
// Modifier votre route existante
|
|
// Remplacez la route existante par :
|
|
app.get('/api/get_declarations', async (req, res) => {
|
|
try {
|
|
console.log('Récupération des déclarations...');
|
|
|
|
const result = await pool.request().query(`
|
|
SELECT
|
|
d.id,
|
|
d.formateur_numero as utilisateur_id,
|
|
td.id as type_demande_id,
|
|
d.date,
|
|
d.duree,
|
|
d.description,
|
|
d.formateur_numero,
|
|
'pending' as status,
|
|
td.libelle as activityType,
|
|
f.NOM_ENS as nom,
|
|
f.PRENOM_ENS as prenom,
|
|
'Non défini' as campus
|
|
FROM declarations d
|
|
INNER JOIN types_demandes td ON d.type_demande_id = td.id
|
|
LEFT JOIN FormateurSqy f ON d.formateur_numero = f.NUMERO
|
|
ORDER BY d.date DESC
|
|
`);
|
|
|
|
console.log(`${result.recordset.length} déclarations trouvées`);
|
|
res.json(result.recordset);
|
|
} catch (error) {
|
|
console.error('Erreur lors de la récupération:', error);
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
|
|
// Démarrage du serveur
|
|
async function startServer() {
|
|
const dbConnected = await connectDatabase();
|
|
|
|
if (!dbConnected) {
|
|
console.log('Impossible de démarrer sans base de données');
|
|
return;
|
|
}
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`Serveur démarré sur http://localhost:${PORT}`);
|
|
console.log('Routes disponibles :');
|
|
console.log('- GET /api/test');
|
|
console.log('- GET /api/db-test');
|
|
console.log('- GET /api/get_declarations');
|
|
console.log('- PUT /api/declarations/:id/status');
|
|
|
|
});
|
|
}
|
|
|
|
// Arrêt propre
|
|
process.on('SIGINT', async () => {
|
|
console.log('Arrêt du serveur...');
|
|
if (pool) {
|
|
await pool.close();
|
|
}
|
|
process.exit(0);
|
|
});
|
|
|
|
// Démarrer
|
|
startServer(); |