mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
add migration to fix empty checklist.id
This commit is contained in:
78
migrations/20160527_fix_empty_checklist_id.js
Normal file
78
migrations/20160527_fix_empty_checklist_id.js
Normal file
@@ -0,0 +1,78 @@
|
||||
var uuid = require('uuid').v4;
|
||||
var mongo = require('mongodb').MongoClient;
|
||||
var _ = require('lodash');
|
||||
|
||||
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;
|
||||
});
|
||||
Reference in New Issue
Block a user