delete unread messages when a user leaves a group

closes #7955
closes #7965
This commit is contained in:
Thomas Gamble
2016-09-01 19:32:09 -04:00
committed by Blade Barringer
parent 8bb92577b0
commit cb38475765
3 changed files with 44 additions and 7 deletions

View File

@@ -380,6 +380,13 @@ api.rejectGroupInvite = {
},
};
function _removeMessagesFromMember (member, groupId) {
if (member.newMessages[groupId]) {
delete member.newMessages[groupId];
member.markModified('newMessages');
}
}
/**
* @api {post} /api/v3/groups/:groupId/leave Leave a group
* @apiName LeaveGroup
@@ -398,7 +405,6 @@ api.leaveGroup = {
middlewares: [authWithHeaders()],
async handler (req, res) {
let user = res.locals.user;
req.checkParams('groupId', res.t('groupIdRequired')).notEmpty();
// When removing the user from challenges, should we keep the tasks?
req.checkQuery('keep', res.t('keepOrRemoveAll')).optional().isIn(['keep-all', 'remove-all']);
@@ -412,7 +418,7 @@ api.leaveGroup = {
throw new NotFound(res.t('groupNotFound'));
}
// During quests, checke wheter user can leave
// During quests, check if user can leave
if (group.type === 'party') {
if (group.quest && group.quest.leader === user._id) {
throw new NotAuthorized(res.t('questLeaderCannotLeaveGroup'));
@@ -424,6 +430,11 @@ api.leaveGroup = {
}
await group.leave(user, req.query.keep);
_removeMessagesFromMember(user, group._id);
await user.save();
res.respond(200, {});
},
};
@@ -518,10 +529,7 @@ api.removeGroupMember = {
member.party._id = undefined; // TODO remove quest information too? Use group.leave()?
}
if (member.newMessages[group._id]) {
member.newMessages[group._id] = undefined;
member.markModified('newMessages');
}
_removeMessagesFromMember(member, group._id);
if (group.quest && group.quest.active && group.quest.leader === member._id) {
member.items.quests[group.quest.key] += 1;