var saved = results[1];
removeSelf(saved, user);
res.json(saved);
})
}
api.deleteChatMessage = function(req, res, next){
var user = res.locals.user
var group = res.locals.group;
var message = _.find(group.chat, {id: req.params.messageId, uuid: user.id});
if(message === undefined) return res.json(404, {err: "Message not found!"});
if(user.id !== message.uuid){
if(!user.backer || (user.backer && !user.backer.admin)){
return res.json(401, {err: "Not authorized to delete this message!"})
}
}
group.chat = _.without(group.chat, message);
group.save(function(err, data){
if(err) return res.json(500, {err: err});
res.send(204);
});
}
api.join = function(req, res, next) {
var user = res.locals.user,
group = res.locals.group;
if (group.type == 'party' && group._id == (user.invitations && user.invitations.party && user.invitations.party.id)) {
user.invitations.party = undefined;
user.save();
}
else if (group.type == 'guild' && user.invitations && user.invitations.guilds) {
var i = _.findIndex(user.invitations.guilds, {id:group._id});
if (~i) user.invitations.guilds.splice(i,1);
user.save();
}
group.members.push(user._id);
async.series([
function(cb){
group.save(cb);
},
function(cb){
Group.findById(group._id).populate('members', partyFields).exec(cb);
}
], function(err, results){
if (err) return res.json(500,{err:err});
res.json(results[1]);
});
}
api.leave = function(req, res, next) {
var user = res.locals.user,
group = res.locals.group;
Group.update({_id:group._id},{$pull:{members:user._id}}, function(err, saved){
if (err) return res.json(500,{err:err});
res.send(200, {_id: saved._id});
})
}
api.invite = function(req, res, next) {
var group = res.locals.group;
var uuid = req.query.uuid;
User.findById(uuid, function(err,invite){
if (err) return res.json(500,{err:err});
if (!invite)
return res.json(400,{err:'User with id '+req.query.uid+' not found'});
if (group.type == 'guild') {
if (_.contains(group.members,uuid))
return res.json(400,{err: "User already in that group"});
if (invite.invitations && invite.invitations.guilds && _.find(invite.invitations.guilds, {id:group._id}))
return res.json(400, {err:"User already invited to that group"});
sendInvite();
} else if (group.type == 'party') {
if (invite.invitations && !_.isEmpty(invite.invitations.party))
return res.json(400,{err:"User already pending invitation."});
Group.find({type:'party', members:{$in:[uuid]}}, function(err, groups){
if (err) return res.json(500,{err:err});
if (!_.isEmpty(groups))
return res.json(400,{err:"User already in a party."})
sendInvite();
})
}
function sendInvite (){
if(group.type === 'guild'){
invite.invitations.guilds.push({id: group._id, name: group.name});
}else{