const pool = require('../config/db'); const { logActivity } = require('../services/activityLog'); exports.listByMember = async (req, res) => { try { const [rows] = await pool.query(` SELECT a.*, u.prenom AS created_prenom, r.prenom AS remplace_prenom, r.nom AS remplace_nom, rg.prenom AS remplace_guest_prenom, rg.nom AS remplace_guest_nom FROM absences a LEFT JOIN users u ON u.id = a.created_by LEFT JOIN users r ON r.id = a.remplace_par_id AND (a.remplace_par_type = 'member' OR a.remplace_par_type IS NULL) LEFT JOIN invites rg ON rg.id = a.remplace_par_guest_id AND a.remplace_par_type = 'guest' WHERE a.membre_id = ? ORDER BY a.date_absence DESC `, [req.params.id]); res.json(rows); } catch (err) { console.error(err); res.status(500).json({ error: 'Erreur serveur' }); } }; exports.create = async (req, res) => { try { const { membre_id, date_absence, motif, prevenu, remplace_par_type, remplace_par_guest_id, remplace_par_id } = req.body; const rType = remplace_par_type === 'guest' && remplace_par_guest_id ? 'guest' : 'member' const rMemberId = rType === 'member' ? (remplace_par_id || null) : null const rGuestId = rType === 'guest' ? (remplace_par_guest_id || null) : null await pool.query( 'INSERT INTO absences (membre_id, date_absence, motif, prevenu, remplace_par_id, remplace_par_type, remplace_par_guest_id, created_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [membre_id, date_absence, motif || null, prevenu ? 1 : 0, rMemberId, rType, rGuestId, req.user.id] ); logActivity(req, 'absence_ajout', { membre_id, date_absence }); res.status(201).json({ message: 'Absence enregistrée' }); } catch (err) { console.error(err); res.status(500).json({ error: 'Erreur serveur' }); } }; exports.remove = async (req, res) => { try { await pool.query('DELETE FROM absences WHERE id = ?', [req.params.id]); logActivity(req, 'absence_suppression', { absenceId: req.params.id }); res.json({ message: 'Absence supprimée' }); } catch (err) { console.error(err); res.status(500).json({ error: 'Erreur serveur' }); } }; exports.stats = async (req, res) => { try { const [rows] = await pool.query(` SELECT u.id, u.prenom, u.nom, COUNT(a.id) AS total_absences FROM users u LEFT JOIN absences a ON a.membre_id = u.id WHERE u.actif = 1 GROUP BY u.id ORDER BY total_absences DESC LIMIT 10 `); res.json(rows); } catch (err) { console.error(err); res.status(500).json({ error: 'Erreur serveur' }); } };