nakama/backend/routes/notifications.js

76 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require('express');
const router = express.Router();
const { authenticate } = require('../middleware/auth');
const Notification = require('../models/Notification');
// Получить уведомления пользователя
router.get('/', authenticate, async (req, res) => {
try {
const { page = 1, limit = 50 } = req.query;
const notifications = await Notification.find({ recipient: req.user._id })
.populate('sender', 'username firstName lastName photoUrl')
.populate('post', 'content imageUrl')
.sort({ createdAt: -1 })
.limit(limit * 1)
.skip((page - 1) * limit)
.exec();
const count = await Notification.countDocuments({ recipient: req.user._id });
const unreadCount = await Notification.countDocuments({
recipient: req.user._id,
read: false
});
res.json({
notifications,
totalPages: Math.ceil(count / limit),
currentPage: page,
unreadCount
});
} catch (error) {
console.error('Ошибка получения уведомлений:', error);
res.status(500).json({ error: 'Ошибка сервера' });
}
});
// Отметить уведомление как прочитанное
router.put('/:id/read', authenticate, async (req, res) => {
try {
const notification = await Notification.findOne({
_id: req.params.id,
recipient: req.user._id
});
if (!notification) {
return res.status(404).json({ error: 'Уведомление не найдено' });
}
notification.read = true;
await notification.save();
res.json({ message: 'Уведомление прочитано' });
} catch (error) {
console.error('Ошибка обновления уведомления:', error);
res.status(500).json({ error: 'Ошибка сервера' });
}
});
// Отметить все уведомления как прочитанные
router.put('/read-all', authenticate, async (req, res) => {
try {
await Notification.updateMany(
{ recipient: req.user._id, read: false },
{ read: true }
);
res.json({ message: 'Все уведомления прочитаны' });
} catch (error) {
console.error('Ошибка обновления уведомлений:', error);
res.status(500).json({ error: 'Ошибка сервера' });
}
});
module.exports = router;