diff --git a/migrations/20130508_fix_duff_party_subscriptions.js b/migrations/20130508_fix_duff_party_subscriptions.js new file mode 100644 index 0000000000..7d9c041f92 --- /dev/null +++ b/migrations/20130508_fix_duff_party_subscriptions.js @@ -0,0 +1,36 @@ +/** + * 745612d and fedc5b6 added a db-subscription optimization to the initial subscribe. + * However, it requires the user only be to one party. That should be the case anyway, but user.party.current was letting + * us look past the fact that a user was erroneously subscribed to multiple parties. This fixes + * + * mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130508_fix_duff_party_subscriptions.js + */ + + +// since our primary subscription will first hit parties now, we *definitely* need an index there +db.parties.ensureIndex( { 'members': 1, 'background': 1} ); + +db.parties.find().forEach(function(party){ + + if(!party.members) { + return db.parties.remove({_id:party._id}); + } + + // Find all members + db.users.find( {_id: {$in:party.members} }, {_id:1,party:1} ).forEach(function(user){ + // user somehow is subscribed to this party in the background, but they're it's not their primary party + if (user.party && user.party.current !== party._id) { + i = party.members.indexOf(user._id); + party.members.splice(i, 1); + } + + // if after we remove the user, the party is empty - delete this party + if (_.isEmpty(party.members)) { + db.parties.remove({_id:party._id}); + + // else just set it + } else { + db.parties.update({_id:party._id}, {$set:{members:party.members}}); + } + }) +})