UNPKG

linagora-rse

Version:
173 lines (140 loc) 5.44 kB
'use strict'; const logger = require('../../core/logger'); const notificationModule = require('../../core/notification/usernotification'); module.exports = { getUnreadCount, list, load, loadAll, setAcknowledged, setAllRead, setRead }; function getUnreadCount(req, res) { const query = { read: false }; notificationModule.countForUser(req.user._id.toString(), query, (err, count) => { if (err) { return res.status(500).json({error: {status: 500, message: 'Server Error', details: 'Cannot get unread notification for current user: ' + err.message}}); } res.status(200).json({ unread_count: count }); }); } function list(req, res) { const user = req.user; const query = {}; if (req.query.limit) { const limit = parseInt(req.query.limit, 10); if (!isNaN(limit)) { query.limit = limit; } } if (req.query.offset) { const offset = parseInt(req.query.offset, 10); if (!isNaN(offset)) { query.offset = offset; } } if (req.query.read === 'true') { query.read = true; } if (req.query.read === 'false') { query.read = false; } notificationModule.getForUser(user._id.toString(), query, (err, notifications) => { if (err) { return res.status(500).json({error: {code: 500, message: 'Server Error', details: err.details}}); } notifications = notifications || []; notificationModule.countForUser(user._id.toString(), query, (err, count) => { if (err) { logger.warn('Can not count user notification : ' + err.message); count = notifications.length; } res.header('X-ESN-Items-Count', count); res.status(200).json(notifications); }); }); } function load(req, res, next) { if (req.params.id) { notificationModule.get(req.params.id, (err, usernotification) => { if (err) { return res.status(500).json({error: {status: 500, message: 'Server Error', details: 'Cannot load user notification: ' + err.message}}); } if (!usernotification) { return res.status(404).json({error: { status: 404, message: 'Not found', details: 'The user notification has not been found'}}); } req.usernotification = usernotification; next(); }); } else { res.status(400).json({error: { status: 400, message: 'Bad request', details: 'Missing parameter id'}}); } } function loadAll(req, res, next) { if (!req.query || !req.query.ids) { return res.status(400).json({error: { status: 400, message: 'Bad request', details: 'Missing ids in query'}}); } if (!(req.query.ids instanceof Array)) { req.query.ids = [req.query.ids]; } notificationModule.getAll(req.query.ids, (err, usernotifications) => { if (err) { return res.status(500).json({error: {status: 500, message: 'Server Error', details: 'Cannot load user notifications: ' + err.message}}); } usernotifications = usernotifications || []; if (usernotifications.length === 0) { return res.status(404).json({error: { status: 404, message: 'Not found', details: 'No user notifications have not been found'}}); } const foundIds = usernotifications.map(usernotification => usernotification._id.toString()); req.query.ids .filter(id => foundIds.indexOf(id) < 0) .forEach(id => logger.warn(`usernotification ${id} can not be found`)); req.usernotifications = usernotifications; next(); }); } function setAcknowledged(req, res) { if (!req.body) { return res.status(400).json({error: { status: 400, message: 'Bad request', details: 'Request body is not defined'}}); } if (req.body.value !== true && req.body.value !== false) { return res.status(400).json({error: { status: 400, message: 'Bad request', details: 'body value parameter is not boolean'}}); } notificationModule.setAcknowledged(req.usernotification, req.body.value, err => { if (err) { return res.status(500).json({error: {status: 500, message: 'Server Error', details: 'Cannot set the user notification as acknowledged: ' + err.message}}); } res.status(205).end(); }); } function setAllRead(req, res) { if (!req.body) { return res.status(400).json({error: { status: 400, message: 'Bad request', details: 'Request body is not defined'}}); } if (req.body.value !== true && req.body.value !== false) { return res.status(400).json({error: { status: 400, message: 'Bad request', details: 'body value parameter is not boolean'}}); } notificationModule.setAllRead(req.usernotifications, req.body.value, err => { if (err) { return res.status(500).json({error: {status: 500, message: 'Server Error', details: 'Cannot set the user notifications as read: ' + err.message}}); } res.status(205).end(); }); } function setRead(req, res) { if (!req.body) { return res.status(400).json({error: { status: 400, message: 'Bad request', details: 'Request body is not defined'}}); } if (req.body.value !== true && req.body.value !== false) { return res.status(400).json({error: { status: 400, message: 'Bad request', details: 'body value parameter is not boolean'}}); } notificationModule.setRead(req.usernotification, req.body.value, err => { if (err) { return res.status(500).json({error: {status: 500, message: 'Server Error', details: 'Cannot set the user notification as read: ' + err.message}}); } res.status(205).end(); }); }