98 lines
3.2 KiB
JavaScript
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;
|