From 6e678abf2228ea9a3a1997c5ffe1db4a8a7108fa Mon Sep 17 00:00:00 2001 From: Alice Harris Date: Sun, 14 Sep 2014 14:46:31 +1000 Subject: [PATCH] make code better --- .../20140810_upgrade_admin_contrib_tiers.js | 102 +++++++++++++----- 1 file changed, 74 insertions(+), 28 deletions(-) diff --git a/migrations/20140810_upgrade_admin_contrib_tiers.js b/migrations/20140810_upgrade_admin_contrib_tiers.js index 60e38668cb..6843d0582f 100644 --- a/migrations/20140810_upgrade_admin_contrib_tiers.js +++ b/migrations/20140810_upgrade_admin_contrib_tiers.js @@ -1,30 +1,76 @@ -// https://github.com/HabitRPG/habitrpg/issues/3801 -// Convert contributors of Tier 7 with admin flag to Tier 8 (moderators). -// Convert contributors of Tier 8 to Tier 9 (staff) (all Tier 8s are admins). +var migrationName = '20140810_upgrade_admin_contrib_tiers'; +var authorName = 'Alys'; // in case script author needs to know when their ... +var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done -db.users.update( - { - 'contributor.admin':true, - 'contributor.level':{$gte:7} - }, - { - $inc: { 'contributor.level': 1 } - }, - { multi: true } -); +/** + * https://github.com/HabitRPG/habitrpg/issues/3801 + * Convert Tier 8 contributors to Tier 9 (staff) (all current Tier 8s are admins). + * Convert Tier 7 contributors with admin flag to Tier 8 (moderators). + */ + +var mongo = require('mongoskin'); +var _ = require('lodash'); + +var dbUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users'); + +var query = { $and: [ + { 'migration': {$ne: migrationName} }, + { 'contributor.admin':true }, + { 'contributor.level':{$gte:7} } +]}; + +var fields = {'migration':1, + 'contributor.admin':1, + 'contributor.level':1, + 'auth.local.username':1, + 'profile.name':1, + }; + +var userResults = {}; // each key is a UUID, each value is a username; + // contains only the users changed + +console.warn('Updating users...'); +var progressCount = 1000; +var count = 0; +dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) { + if (err) { return exiting(1, 'ERROR! ' + err); } + if (!user) { + console.warn('All appropriate users found and modified.'); + return displayData(); + } + count++; + + var set = {'migration': migrationName}; + var inc = {'contributor.level':1, _v:1}; + + userResults[user._id] = user.profile.name; + + dbUsers.update({_id:user._id}, {$set:set, $inc:inc}); + + if (count%progressCount == 0) console.warn(count + ' ' + user._id); + if (user._id == authorUuid) console.warn(authorName + ' processed'); + if (user._id == '9' ) console.warn('lefnire' + ' processed'); +}); + + +function displayData() { + console.log('users modified:'); + _.each(userResults, function(name, uuid) { + console.log(name); + }); + console.warn('\n' + count + + ' users processed (should be 12 -- 11 listed in the Hall plus Its Bailey)\n'); + return exiting(0); +} + + +function exiting(code, msg) { + code = code || 0; // 0 = success + if (code && !msg) { msg = 'ERROR!'; } + if (msg) { + if (code) { console.error(msg); } + else { console.log( msg); } + } + process.exit(code); +} -/* -db.users.find({_id : ObjectId("6")}) -db.users.find( - { - 'contributor.admin':true, - 'contributor.level':{$gte:7} - }, - { - 'username':1, - 'profile.name':1, - 'contributor.level':1, - 'contributor.admin':1 - } -); -*/