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

98 lines
3.2 KiB
JavaScript

const { Router } = require('express');
const pool = require('../config/db');
const { authenticate } = require('../middleware/auth');
const router = Router();
router.get('/', authenticate, async (req, res) => {
try {
const [rows] = await pool.query(
`SELECT n.id, n.title, n.body, n.created_at,
u.prenom AS sender_prenom, u.nom AS sender_nom,
nr.read_at, 'admin' AS source,
NULL AS invite_id,
NULL AS guest_name
FROM notifications n
JOIN notification_recipients nr ON nr.notification_id = n.id
JOIN users u ON u.id = n.sender_id
WHERE nr.user_id = ?
UNION ALL
SELECT -(i.id) AS id,
CONCAT('Invitation en attente - ', i.prenom, ' ', i.nom) AS title,
CONCAT('Vous n''avez pas encore envoy?? l''email d''invitation ?? ', i.prenom, ' ', i.nom) AS body,
i.created_at,
NULL AS sender_prenom, NULL AS sender_nom,
NULL AS read_at,
'pending_invite' AS source,
i.id AS invite_id,
CONCAT(i.prenom, ' ', i.nom) AS guest_name
FROM invites i
WHERE i.invite_par_id = ? AND (i.mail_envoye IS NULL OR i.mail_envoye = 0)
ORDER BY created_at DESC`,
[req.user.id, req.user.id]
);
res.json(rows);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erreur serveur' });
}
});
router.get('/unread-count', authenticate, async (req, res) => {
try {
const [rows] = await pool.query(
'SELECT COUNT(*) AS count FROM notification_recipients WHERE user_id = ? AND read_at IS NULL',
[req.user.id]
);
const [inviteRows] = await pool.query(
'SELECT COUNT(*) AS count FROM invites WHERE invite_par_id = ? AND (mail_envoye IS NULL OR mail_envoye = 0)',
[req.user.id]
);
res.json({ count: Number(rows[0].count) + Number(inviteRows[0].count) });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erreur serveur' });
}
});
router.post('/:id/read', authenticate, async (req, res) => {
try {
await pool.query(
'UPDATE notification_recipients SET read_at = NOW() WHERE notification_id = ? AND user_id = ?',
[req.params.id, req.user.id]
);
res.json({ message: 'Marqu?? comme lu' });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erreur serveur' });
}
});
router.post('/read-all', authenticate, async (req, res) => {
try {
await pool.query(
'UPDATE notification_recipients SET read_at = NOW() WHERE user_id = ? AND read_at IS NULL',
[req.user.id]
);
res.json({ message: 'Tout marqu?? comme lu' });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erreur serveur' });
}
});
router.delete('/:id/recipient', authenticate, async (req, res) => {
try {
await pool.query(
'DELETE FROM notification_recipients WHERE notification_id = ? AND user_id = ?',
[req.params.id, req.user.id]
);
res.json({ message: 'Supprim??' });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erreur serveur' });
}
});
module.exports = router;