diff --git a/seed_data/userMigration.js b/seed_data/userMigration.js index c02a18385b..ffad7be0c4 100644 --- a/seed_data/userMigration.js +++ b/seed_data/userMigration.js @@ -1,6 +1,5 @@ require('dotenv').load(); var mongodb = require('mongodb'), - User = require('../models/User.js'), newChallenges = require('./challengeMapping.json'), secrets = require('../config/secrets'); @@ -8,69 +7,102 @@ var mongodb = require('mongodb'), mongoose.connect(secrets.db); -var i = 1; -var stream = User.find({}).skip(0).limit(0).stream(); +function userModelAssurity(cb) { + console.log('userModelAssurity'); + var i = 1; + var stream = User.find({}).skip(0).limit(0).batchSize(20000).stream(); -stream.on('data', function(user) { - console.log(i++); - user.save() -}) -.on('error', function (err) { - console.log(err); -}).on('close', function () { + stream.on('data', function (user) { + console.log(i++); + this.pause(); + user.needsMigration = true; + user.save(function (err) { + if (err) { + console.log('woops'); + } + this.resume(); + }.bind(this)); + }) + .on('error', function (err) { + console.log(err); + }).on('close', function () { + console.log('done with set'); + stream.destroy(); + cb(); + }); +} + +function migrateIt() { + console.log('migrateIt'); + var dones = 0; + var done = function() { + dones++; + if (dones === 2) { + process.exit(0); + } + if (dones === 1) { + userModelMigration(done); + } + }; + console.log('calling userModelAssurity'); + userModelAssurity(done); +} + +function userModelMigration(cb) { + + var i = 1; + + var stream = User.find({needsMigration: true}).skip(0).limit(0) + .batchSize(20000).stream(); + + stream.on('data', function (user) { + console.log(i++); + if (user.challengesHash) { + this.pause(); + user.needsMigration = false; + var oldChallenges = Object.keys(user.challengesHash).filter(function (key) { + if (user.challengesHash[key]) { + user.progressTimestamps.push(user.challengesHash[key] * 1000); + } + return user.challengesHash[key]; + }); + + newChallenges.forEach(function (challenge) { + if (oldChallenges.indexOf(challenge.oldNumber) !== -1 && challenge.newId) { + user.completedCoursewares.push({ + _id: challenge.newId, + completedDate: user.challengesHash[challenge.oldNumber] * 1000 + }); + } + }); + + user.completedCoursewares.forEach(function (course) { + var indexOfCourse = user.uncompletedCoursewares.indexOf(course._id) !== -1; + if (indexOfCourse !== -1) { + user.uncompletedCoursewares.splice(indexOfCourse, 1); + } + }); + + user.completedBonfires.forEach(function (bonfire) { + bonfire.completedDate = bonfire.completedDate * 1000; + user.progressTimestamps.push(bonfire.completedDate); + }); + } + + var self = this; + user.save(function (err) { + if (err) { + console.log('woops'); + } + self.resume(); + }); + }).on('error', function (err) { + console.log(err); + }).on('close', function () { console.log('done with set'); stream.destroy(); -}); - -i = 1; - -var stream = User.find({'user.needsMigration': true}).skip(0).limit(0).stream(); - -stream.on('data', function (user) { - if (user.challengesHash) { - this.pause(); - console.log(i++); - user.needsMigration = false; - var oldChallenges = Object.keys(user.challengesHash).filter(function (key) { - if (user.challengesHash[key]) { - user.progressTimestamps.push(user.challengesHash[key] * 1000); - } - return user.challengesHash[key]; - }); - - newChallenges.forEach(function (challenge) { - if (oldChallenges.indexOf(challenge.oldNumber) !== -1 && challenge.newId) { - user.completedCoursewares.push({ - _id: challenge.newId, - completedDate: user.challengesHash[challenge.oldNumber] * 1000 - }); - } - }); - - user.completedCoursewares.forEach(function (course) { - var indexOfCourse = user.uncompletedCoursewares.indexOf(course._id) !== -1; - if (indexOfCourse !== -1) { - user.uncompletedCoursewares.splice(indexOfCourse, 1); - } - }); - - user.completedBonfires.forEach(function (bonfire) { - bonfire.completedDate = bonfire.completedDate * 1000; - user.progressTimestamps.push(bonfire.completedDate); - }); - } - - var self = this; - user.save(function(err) { - if (err) { - console.log('woops'); - } - self.resume(); + cb(); }); -}).on('error', function (err) { - console.log(err); -}).on('close', function () { - console.log('done with set'); - stream.destroy(); - process.exit(0); -}); +} + +migrateIt();