Files
habitica/website/server/controllers/api-v3/notifications.js
Matteo Pagliazzi 03a09b7546 Fix issues with Bootstrap Vue and Boostrap upgrades (#9452)
* start to fix modals

* fixed cards paddings

* fix notifications not being marked as read

* add tests for reading a notification

* fixed indentation and added tests for reading multiple notifications

* register from home page using enter key
2017-11-09 19:37:47 +01:00

92 lines
2.2 KiB
JavaScript

import { authWithHeaders } from '../../middlewares/auth';
import _ from 'lodash';
import {
NotFound,
} from '../../libs/errors';
let api = {};
/**
* @apiIgnore Not yet part of the public API
* @api {post} /api/v3/notifications/:notificationId/read Mark one notification as read
* @apiName ReadNotification
* @apiGroup Notification
*
* @apiParam (Path) {UUID} notificationId
*
* @apiSuccess {Object} data user.notifications
*/
api.readNotification = {
method: 'POST',
url: '/notifications/:notificationId/read',
middlewares: [authWithHeaders()],
async handler (req, res) {
let user = res.locals.user;
req.checkParams('notificationId', res.t('notificationIdRequired')).notEmpty();
let validationErrors = req.validationErrors();
if (validationErrors) throw validationErrors;
let index = _.findIndex(user.notifications, {
id: req.params.notificationId,
});
if (index === -1) {
throw new NotFound(res.t('messageNotificationNotFound'));
}
user.notifications.splice(index, 1);
await user.update({
$pull: { notifications: { id: req.params.notificationId } },
}).exec();
res.respond(200, user.notifications);
},
};
/**
* @apiIgnore Not yet part of the public API
* @api {post} /api/v3/notifications Mark notifications as read
* @apiName ReadNotifications
* @apiGroup Notification
*
*
* @apiSuccess {Object} data user.notifications
*/
api.readNotifications = {
method: 'POST',
url: '/notifications/read',
middlewares: [authWithHeaders()],
async handler (req, res) {
let user = res.locals.user;
req.checkBody('notificationIds', res.t('notificationsRequired')).notEmpty();
let validationErrors = req.validationErrors();
if (validationErrors) throw validationErrors;
let notifications = req.body.notificationIds;
for (let notification of notifications) {
let index = _.findIndex(user.notifications, {
id: notification,
});
if (index === -1) {
throw new NotFound(res.t('messageNotificationNotFound'));
}
user.notifications.splice(index, 1);
}
await user.update({
$pull: { notifications: { id: { $in: notifications } } },
}).exec();
res.respond(200, user.notifications);
},
};
module.exports = api;