138 lines
3.6 KiB
JavaScript
138 lines
3.6 KiB
JavaScript
/*eslint-disable block-scoped-var */
|
|
require('dotenv').load();
|
|
var User = require('../models/User.js'),
|
|
secrets = require('../config/secrets'),
|
|
mongoose = require('mongoose'),
|
|
R = require('ramda'),
|
|
ziplines = require('./challenges/ziplines.json'),
|
|
basejumps = require('./challenges/basejumps.json');
|
|
|
|
mongoose.connect(secrets.db);
|
|
|
|
var ziplineIds = ziplines.challenges.map(function(elem) {
|
|
return elem.id;
|
|
});
|
|
var basejumpIds = basejumps.challenges.map(function(elem) {
|
|
return elem.id;
|
|
});
|
|
var ziplineAndBaseJumpIds = R.concat(ziplineIds, basejumpIds);
|
|
|
|
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++);
|
|
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);
|
|
});
|
|
}
|
|
*/
|
|
user.needsMigration = false;
|
|
user.completedChallenges = user.completedChallenges.map(function(elem) {
|
|
if (ziplineAndBaseJumpIds.indexOf(elem.id) > 0) {
|
|
return ({
|
|
id: elem.id,
|
|
name: elem.name,
|
|
completedWith: elem.completedWith,
|
|
completedDate: elem.completedDate,
|
|
solution: elem.solution,
|
|
githubLink: elem.githubLink,
|
|
verified: elem.verified,
|
|
challengeType: typeof elem.githubLink === 'boolean' ? 4 : 3
|
|
});
|
|
} else {
|
|
return elem;
|
|
}
|
|
});
|
|
|
|
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();
|
|
cb();
|
|
});
|
|
}
|
|
|
|
migrateIt();
|