mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-10-27 03:02:30 +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
84 lines
2.2 KiB
JavaScript
84 lines
2.2 KiB
JavaScript
var uuid = require('uuid').v4;
|
|
var mongo = require('mongodb').MongoClient;
|
|
var _ = require('lodash');
|
|
|
|
// 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
|
|
|
|
var taskIds = require('checklists-no-id.json').map(function (obj) {
|
|
return obj._id;
|
|
});
|
|
|
|
// Fix empty task.checklistt.id
|
|
|
|
var progressCount = 100;
|
|
var count = 0;
|
|
|
|
function displayData() {
|
|
console.warn('\n' + count + ' tasks processed\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); }
|
|
}
|
|
}
|
|
|
|
mongo.connect('db url')
|
|
.then(function (db) {
|
|
var dbTasks = db.collection('tasks');
|
|
|
|
// specify a query to limit the affected tasks (empty for all tasks):
|
|
var query = {
|
|
'_id':{ $in: taskIds },
|
|
};
|
|
|
|
// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
|
|
var fields = {
|
|
'checklist': 1,
|
|
};
|
|
|
|
console.warn('Updating tasks...');
|
|
|
|
dbTasks.find(query, fields, {batchSize: 250}).toArray(function(err, tasks) {
|
|
if (err) { return exiting(1, 'ERROR! ' + err); }
|
|
|
|
tasks.forEach(function (task) {
|
|
var checklist = task.checklist || [];
|
|
checklist.forEach(function (item) {
|
|
if (!item.id || item.id === "") {
|
|
item.id = uuid();
|
|
}
|
|
});
|
|
|
|
// specify user data to change:
|
|
var set = {
|
|
checklist: checklist,
|
|
};
|
|
//console.log(set);
|
|
|
|
dbTasks.update({_id: task._id}, {$set: set}, function (err, res) {
|
|
if (err) console.error('Error while updating', err);
|
|
});
|
|
|
|
count++;
|
|
if (count % progressCount == 0) console.warn(count + ' ' + task._id);
|
|
});
|
|
|
|
if (count === tasks.length) {
|
|
console.warn('All appropriate tasks found and modified.');
|
|
return displayData();
|
|
}
|
|
});
|
|
})
|
|
.catch(function (err) {
|
|
throw err;
|
|
}); |