Initial commit: Club DynaSQY
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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' });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user