Files
dynasqy/backend/controllers/absenceController.js
T
2026-08-23 09:04:47 +00:00

70 lines
2.6 KiB
JavaScript

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' });
}
};