From ce1e30f9a3695461a58767d0fffc7be799774497 Mon Sep 17 00:00:00 2001 From: Deep Koluguri Date: Wed, 5 Nov 2025 21:14:46 -0500 Subject: [PATCH] notification --- backend/src/routes/notifications.js | 58 ++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/backend/src/routes/notifications.js b/backend/src/routes/notifications.js index 9d47358..8f8f5eb 100644 --- a/backend/src/routes/notifications.js +++ b/backend/src/routes/notifications.js @@ -11,27 +11,36 @@ const Notification = require('../models/Notification'); router.get('/', auth, async (req, res) => { try { const { page = 1, limit = 20, type, status } = req.query; + const ChitGroup = require('../models/ChitGroup'); - const query = { user_id: req.user.id }; + const where = { user_id: req.user.id }; // Filter by type if provided if (type) { - query.type = type; + where.type = type; } // Filter by status if provided if (status) { - query.status = status; + where.status = status; } - const notifications = await Notification.find(query) - .sort({ createdAt: -1 }) - .limit(parseInt(limit)) - .skip((parseInt(page) - 1) * parseInt(limit)) - .populate('group_id', 'name') - .select('-__v'); + const offset = (parseInt(page) - 1) * parseInt(limit); - const total = await Notification.countDocuments(query); + const { count, rows: notifications } = await Notification.findAndCountAll({ + where, + order: [['created_at', 'DESC']], + limit: parseInt(limit), + offset: offset, + include: [ + { + model: ChitGroup, + as: 'group', + attributes: ['name'], + required: false + } + ] + }); res.json({ success: true, @@ -39,17 +48,19 @@ router.get('/', auth, async (req, res) => { notifications, pagination: { currentPage: parseInt(page), - totalPages: Math.ceil(total / parseInt(limit)), - totalItems: total, + totalPages: Math.ceil(count / parseInt(limit)), + totalItems: count, itemsPerPage: parseInt(limit) } } }); } catch (error) { console.error('Error fetching notifications:', error); + console.error('Error stack:', error.stack); res.status(500).json({ success: false, - message: 'Server error' + message: 'Server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined }); } }); @@ -174,12 +185,23 @@ router.delete('/:id', auth, async (req, res) => { */ router.get('/stats', auth, async (req, res) => { try { - const total = await Notification.countDocuments({ user_id: req.user.id }); + const { Sequelize } = require('sequelize'); + + const total = await Notification.count({ + where: { user_id: req.user.id } + }); + const unread = await Notification.getUnreadCount(req.user.id); - const byType = await Notification.aggregate([ - { $match: { user_id: req.user.id } }, - { $group: { _id: '$type', count: { $sum: 1 } } } - ]); + + const byType = await Notification.findAll({ + attributes: [ + 'type', + [Sequelize.fn('COUNT', Sequelize.col('type')), 'count'] + ], + where: { user_id: req.user.id }, + group: ['type'], + raw: true + }); res.json({ success: true,