mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
* upgrade gulp-babel * upgrade babel-eslint * upgrade eslint-friendly-formatter * start upgrading chai * start to upgrade eslint * restore skipped tests * start to upgrqde monk * fix linting and remove unused file * fix mocha notifications, and common tests * fix unit tests * start to fix initrgration tests * more integration tests fixes * upgrade monk to latest version * lint /scripts * migrations: start moving to /archive unused migrations and run eslint with --fix * lint migrations * fix more integration tests * fix test
41 lines
1.7 KiB
JavaScript
41 lines
1.7 KiB
JavaScript
/**
|
|
* 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
|
|
*/
|
|
|
|
// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
|
|
// We've now upgraded to lodash v4 but the code used in this migration has not been
|
|
// adapted to work with it. Before this migration is used again any lodash method should
|
|
// be checked for compatibility against the v4 changelog and changed if necessary.
|
|
// https://github.com/lodash/lodash/wiki/Changelog#v400
|
|
|
|
// since our primary subscription will first hit parties now, we *definitely* need an index there
|
|
db.parties.ensureIndex({ members: 1}, {background: true});
|
|
|
|
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) {
|
|
let 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}});
|
|
}
|
|
});
|
|
});
|