mirror of
				https://github.com/HabitRPG/habitica.git
				synced 2025-10-31 21:23:06 +01:00 
			
		
		
		
	* common: import lodash modules separately * remove test/content from .eslintignore, fix with eslint --fix content/index * lint test/content * lint content/index except for lodash methods * upgrade server/models * upgrade server/middlewares and server/libs * port server/controllers/top-level * port server/controllers/api-v3 * port views and tests * client old port lodash and _(, missing _. * upgrade client-old * port common/script (root level files only) * port common/script/fns * port common/libs * port common/script/ops * port common/script/content and common/script/libs/shops.js * misc fixes * misc fixes * misc fixes * more tests fixes * fix payments test stubbing, down to 2 failing tests * remove more instances of lodash wrapping * fix bug where toObject does not clone object * fix tests * upgrade migration or add lodash 4 note * update shrinkwrap * fix linting * upgrade eslint-config-habitrpg * update shrinkwrap * recompile shrinkwrap
		
			
				
	
	
		
			82 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //  node .migrations/20140829_change_headAccessory_to_eyewear.js
 | |
| 
 | |
| var migrationName = '20140829_change_headAccessory_to_eyewear';
 | |
| var authorName = 'Alys'; // in case script author needs to know when their ...
 | |
| var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
 | |
| 
 | |
| // 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
 | |
| 
 | |
| /**
 | |
|  * https://github.com/HabitRPG/habitrpg/issues/3645
 | |
|  */
 | |
| var mongo = require('mongoskin');
 | |
| var _ = require('lodash');
 | |
| var liveUsers = mongo.db('localhost:27017/habitrpg2?auto_reconnect').collection('users');
 | |
| 
 | |
| var fields = {'migration':1,
 | |
|     'items.gear.costume.headAccessory':1,
 | |
|     'items.gear.equipped.headAccessory':1,
 | |
|     'items.gear.owned.headAccessory_special_wondercon_black':1,
 | |
|     'items.gear.owned.headAccessory_special_wondercon_red':1,
 | |
|     'items.gear.owned.headAccessory_special_summerRogue':1,
 | |
|     'items.gear.owned.headAccessory_special_summerWarrior':1
 | |
|     };
 | |
| 
 | |
| var progressCount = 1000;
 | |
| var count = 0;
 | |
| liveUsers.findEach({ $and: [
 | |
|   { migration: {$ne:migrationName} },
 | |
|   { $or: [
 | |
|     {'items.gear.owned.headAccessory_special_summerRogue':  {'$exists':true}},
 | |
|     {'items.gear.owned.headAccessory_special_summerWarrior':{'$exists':true}},
 | |
|     {'items.gear.owned.headAccessory_special_wondercon_red':{'$exists':true}},
 | |
|     {'items.gear.owned.headAccessory_special_wondercon_black':{'$exists':true}}
 | |
|   ]}
 | |
| ]}, fields, {batchSize:250}, function(err, user){
 | |
|     count++;
 | |
|     if (!user) err = '!user';
 | |
|     if (err) {return console.error(err);}
 | |
| 
 | |
|     var set = {'migration': migrationName};
 | |
|     var unset = {};
 | |
| 
 | |
|     var oldToNew = {
 | |
|       'headAccessory_special_summerRogue':    'eyewear_special_summerRogue',
 | |
|       'headAccessory_special_summerWarrior':  'eyewear_special_summerWarrior',
 | |
|       'headAccessory_special_wondercon_red':  'eyewear_special_wondercon_red',
 | |
|       'headAccessory_special_wondercon_black':'eyewear_special_wondercon_black'
 | |
|     };
 | |
| 
 | |
|     // items.gear.costume, items.gear.equipped:
 | |
|     _.each(['costume','equipped'],function(type){
 | |
|         _.each(oldToNew,function(newName,oldName){
 | |
|             if (user.items.gear[type].headAccessory === oldName) {
 | |
|                 unset['items.gear.'+type+'.headAccessory'] = "";
 | |
|                   set['items.gear.'+type+'.eyewear'] = newName;
 | |
|             }
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     // items.gear.owned:
 | |
|     _.each(oldToNew,function(newName,oldName){
 | |
|         if (oldName in user.items.gear.owned) {
 | |
|             unset['items.gear.owned.'+oldName] = "";
 | |
|               set['items.gear.owned.'+newName] = user.items.gear.owned[oldName];
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     //console.log(JSON.stringify(user, null, "  "));
 | |
|     //console.log("set: "   + JSON.stringify(set,   null, "  "));
 | |
|     //console.log("unset: " + JSON.stringify(unset, null, "  "));
 | |
| 
 | |
|     liveUsers.update({_id:user._id}, {$set:set, $unset:unset, $inc:{_v:1}});
 | |
| 
 | |
|     if (count%progressCount == 0) console.log(count + ' ' + user._id);
 | |
|     if (user._id == '9') console.log('lefnire processed');
 | |
|     if (user._id == authorUuid) console.log(authorName + ' processed');
 | |
| });
 |