Skip to content

Commit

Permalink
Remove query from group invites, replaced with two queries
Browse files Browse the repository at this point in the history
  • Loading branch information
gisikw committed Feb 25, 2016
1 parent 3270cbf commit 8aa023f
Showing 1 changed file with 44 additions and 33 deletions.
77 changes: 44 additions & 33 deletions website/src/controllers/api-v2/groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -634,45 +634,56 @@ var inviteByEmails = function(invites, group, req, res, next){

async.each(invites, function(invite, cb){
if (invite.email) {
User.findOne({$or: [
{'auth.local.email': invite.email},
{'auth.facebook.emails.value': invite.email}
]}).select({_id: true, 'preferences.emailNotifications': true})
.exec(function(err, userToContact){
if(err) return next(err);

if(userToContact){
var selectAttrs = {_id: true, 'preferences.emailNotifications': true};

User.findOne({'auth.local.email': invite.email})
.select(selectAttrs)
.exec(function(err, userToContact) {
if (err) return next(err);
if (userToContact) {
usersAlreadyRegistered.push(userToContact._id);
return cb();
}

// yeah, it supports guild too but for backward compatibility we'll use partyInvite as query

var link = '?partyInvite='+ utils.encrypt(JSON.stringify({id:group._id, inviter:res.locals.user._id, name:group.name}));

var inviterVars = utils.getUserInfo(res.locals.user, ['name', 'email']);
var variables = [
{name: 'LINK', content: link},
{name: 'INVITER', content: req.body.inviter || inviterVars.name},
{name: 'REPLY_TO_ADDRESS', content: inviterVars.email}
];

if(group.type == 'guild'){
variables.push({name: 'GUILD_NAME', content: group.name});
}

// TODO implement "users can only be invited once"
// Check for the email address not to be unsubscribed
EmailUnsubscription.findOne({email: invite.email}, function(err, unsubscribed){
if(err) return cb(err);
if(unsubscribed) return cb();

utils.txnEmail(invite, ('invite-friend' + (group.type == 'guild' ? '-guild' : '')), variables);

cb();
User.findOne({'auth.facebook.emails.value': invite.email})
.select(selectAttrs)
.exec(function(err, userToContact) {
if (err) return next(err);
if (userToContact) {
usersAlreadyRegistered.push(userToContact._id);
return cb();
}

// yeah, it supports guild too but for backward compatibility we'll use partyInvite as query

var link = '?partyInvite='+ utils.encrypt(JSON.stringify({id:group._id, inviter:res.locals.user._id, name:group.name}));

var inviterVars = utils.getUserInfo(res.locals.user, ['name', 'email']);
var variables = [
{name: 'LINK', content: link},
{name: 'INVITER', content: req.body.inviter || inviterVars.name},
{name: 'REPLY_TO_ADDRESS', content: inviterVars.email}
];

if(group.type == 'guild'){
variables.push({name: 'GUILD_NAME', content: group.name});
}

// TODO implement "users can only be invited once"
// Check for the email address not to be unsubscribed
EmailUnsubscription.findOne({email: invite.email}, function(err, unsubscribed){
if(err) return cb(err);
if(unsubscribed) return cb();

utils.txnEmail(invite, ('invite-friend' + (group.type == 'guild' ? '-guild' : '')), variables);

cb();
});
});
});
});
}else{

} else {
cb();
}
}, function(err){
Expand Down

0 comments on commit 8aa023f

Please sign in to comment.