/** * TASKMATE - Notifications Routes * ================================ * API-Endpunkte für das Benachrichtigungssystem */ const express = require('express'); const router = express.Router(); const notificationService = require('../services/notificationService'); const logger = require('../utils/logger'); /** * GET /api/notifications * Alle Benachrichtigungen des Users abrufen */ router.get('/', (req, res) => { try { const userId = req.user.id; const limit = parseInt(req.query.limit) || 50; const notifications = notificationService.getForUser(userId, limit); const unreadCount = notificationService.getUnreadCount(userId); res.json({ notifications, unreadCount }); } catch (error) { logger.error('Fehler beim Abrufen der Benachrichtigungen:', error); res.status(500).json({ error: 'Fehler beim Abrufen der Benachrichtigungen' }); } }); /** * GET /api/notifications/count * Ungelesene Anzahl ermitteln */ router.get('/count', (req, res) => { try { const userId = req.user.id; const count = notificationService.getUnreadCount(userId); res.json({ count }); } catch (error) { logger.error('Fehler beim Ermitteln der Anzahl:', error); res.status(500).json({ error: 'Fehler beim Ermitteln der Anzahl' }); } }); /** * PUT /api/notifications/:id/read * Als gelesen markieren */ router.put('/:id/read', (req, res) => { try { const userId = req.user.id; const notificationId = parseInt(req.params.id); const success = notificationService.markAsRead(notificationId, userId); if (!success) { return res.status(404).json({ error: 'Benachrichtigung nicht gefunden' }); } // Aktualisierte Zählung senden const io = req.app.get('io'); const count = notificationService.getUnreadCount(userId); if (io) { io.to(`user:${userId}`).emit('notification:count', { count }); } res.json({ success: true, unreadCount: count }); } catch (error) { logger.error('Fehler beim Markieren als gelesen:', error); res.status(500).json({ error: 'Fehler beim Markieren als gelesen' }); } }); /** * PUT /api/notifications/read-all * Alle als gelesen markieren */ router.put('/read-all', (req, res) => { try { const userId = req.user.id; const count = notificationService.markAllAsRead(userId); // Aktualisierte Zählung senden const io = req.app.get('io'); if (io) { io.to(`user:${userId}`).emit('notification:count', { count: 0 }); } res.json({ success: true, markedCount: count, unreadCount: 0 }); } catch (error) { logger.error('Fehler beim Markieren aller als gelesen:', error); res.status(500).json({ error: 'Fehler beim Markieren aller als gelesen' }); } }); /** * DELETE /api/notifications/:id * Benachrichtigung löschen (nur nicht-persistente) */ router.delete('/:id', (req, res) => { try { const userId = req.user.id; const notificationId = parseInt(req.params.id); const success = notificationService.delete(notificationId, userId); if (!success) { return res.status(400).json({ error: 'Benachrichtigung nicht gefunden oder kann nicht gelöscht werden' }); } // Aktualisierte Zählung senden const io = req.app.get('io'); const count = notificationService.getUnreadCount(userId); if (io) { io.to(`user:${userId}`).emit('notification:count', { count }); io.to(`user:${userId}`).emit('notification:deleted', { notificationId }); } res.json({ success: true, unreadCount: count }); } catch (error) { logger.error('Fehler beim Löschen der Benachrichtigung:', error); res.status(500).json({ error: 'Fehler beim Löschen der Benachrichtigung' }); } }); module.exports = router;