mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-15 05:37:22 +01:00
add migrations to fix groups
This commit is contained in:
49
migrations/20150906_groups_fix_leaders.js
Normal file
49
migrations/20150906_groups_fix_leaders.js
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Make sure leaders are existing users
|
||||
*/
|
||||
|
||||
var mongo = require('mongoskin');
|
||||
|
||||
var dbserver = 'mongodb://url';
|
||||
var dbname = 'dbname';
|
||||
var countGroups = 0;
|
||||
var countUsers = 0;
|
||||
|
||||
var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
|
||||
var dbUsers = db.collection('users');
|
||||
var dbGroups = db.collection('groups');
|
||||
|
||||
console.log('Begins work on db');
|
||||
|
||||
dbGroups.findEach({}, {_id: 1, members: 1, leader: 1}, {batchSize: 500}, function(err, group) {
|
||||
if(err) throw err;
|
||||
if(!group) return;
|
||||
|
||||
countGroups++;
|
||||
console.log('Group: ', countGroups);
|
||||
|
||||
var members = group.members;
|
||||
var leader = group.leader;
|
||||
|
||||
dbUsers.count({_id: group.leader}, function(err, count){
|
||||
if(err) throw err;
|
||||
|
||||
// If leader has deleted account
|
||||
if(count < 1) {
|
||||
dbGroups.update({
|
||||
_id: group._id
|
||||
}, {
|
||||
$set: {
|
||||
// Set first user as new leader
|
||||
leader: members[0]
|
||||
}
|
||||
}, {
|
||||
multi: false
|
||||
}, function(err, res){
|
||||
if(err) throw err;
|
||||
|
||||
console.log('Updated: ', res);
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
51
migrations/20150906_groups_remove_deleted_users.js
Normal file
51
migrations/20150906_groups_remove_deleted_users.js
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Remove deleted accounts from groups
|
||||
*/
|
||||
|
||||
var mongo = require('mongoskin');
|
||||
|
||||
var dbserver = 'mongodb://url';
|
||||
var dbname = 'dbname';
|
||||
var countGroups = 0;
|
||||
var countUsers = 0;
|
||||
|
||||
var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
|
||||
var dbUsers = db.collection('users');
|
||||
var dbGroups = db.collection('groups');
|
||||
|
||||
console.log('Begins work on db');
|
||||
|
||||
dbGroups.findEach({}, {_id: 1, members: 1}, {batchSize: 500}, function(err, group) {
|
||||
if(err) throw err;
|
||||
if(!group) return;
|
||||
|
||||
countGroups++;
|
||||
console.log('Group: ', countGroups);
|
||||
|
||||
var members = group.members;
|
||||
|
||||
// Remove users who deleted their account
|
||||
members.forEach(function(member){
|
||||
dbUsers.count({_id: member}, function(err, count){
|
||||
if(err) throw err;
|
||||
|
||||
if(count < 1) {
|
||||
countUsers++;
|
||||
console.log('User: ', countUsers);
|
||||
|
||||
dbGroups.update({
|
||||
_id: group._id
|
||||
}, {
|
||||
$pull: {members: member},
|
||||
$inc: {memberCount: -1}
|
||||
}, {
|
||||
multi: false
|
||||
}, function(err, res){
|
||||
if(err) throw err;
|
||||
|
||||
console.log('Updated: ', res);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
21
migrations/20150906_groups_remove_empty.js
Normal file
21
migrations/20150906_groups_remove_empty.js
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Remove emoty groups
|
||||
*/
|
||||
|
||||
var mongo = require('mongoskin');
|
||||
|
||||
var dbserver = 'mongodb://url';
|
||||
var dbname = 'db';
|
||||
|
||||
var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
|
||||
var dbGroups = db.collection('groups');
|
||||
|
||||
console.log('Begins work on db');
|
||||
|
||||
dbGroups.remove({
|
||||
members: {$size: 0}
|
||||
}, function(err, res){
|
||||
if(err) throw err;
|
||||
|
||||
console.log(res);
|
||||
});
|
||||
Reference in New Issue
Block a user