diff --git a/models/User.js b/models/User.js index 8d089e1c89..cceb4ef65a 100644 --- a/models/User.js +++ b/models/User.js @@ -8,7 +8,6 @@ var userSchema = new mongoose.Schema({ email: { type: String, lowercase: true, - unique: true, trim: true, sparse: true }, @@ -23,7 +22,6 @@ var userSchema = new mongoose.Schema({ profile: { username: { type: String, - unique: true, sparse: true, lowercase: true, trim: true diff --git a/seed_data/userMigration.js b/seed_data/userMigration.js index 38e74f5cb4..696ddb1deb 100644 --- a/seed_data/userMigration.js +++ b/seed_data/userMigration.js @@ -1,42 +1,61 @@ require('dotenv').load(); var mongodb = require('mongodb'), - MongoClient = mongodb.MongoClient, - Server = require('mongodb').Server, + User = require('../models/User.js'), newChallenges = require('./challengeMapping.json'), secrets = require('../config/secrets'); + mongoose = require('mongoose'); -var mongoClient = new MongoClient(new Server('localhost', 27017), {native_parser: true}); -var mongoose = require('mongoose'); mongoose.connect(secrets.db); -var stream = User.find( { needsMigration: true }).batchSize(10000).stream(); -stream.on('data', function(user) { - console.log('test'); - user.needsMigration = true; - user.save(); -}).on('error', function(err) { +var i = 1; +var stream = User.find({}).skip(0).limit(0).batchSize(1000).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(); + }); +}).on('error', function (err) { console.log(err); -}).on('close', function() { +}).on('close', function () { console.log('done with set'); + stream.destroy(); + process.exit(0); }); - //console.log(typeof(user.challengesHash)); - //if (user.challengesHash && typeof(user.challengesHash) === Object) { - // var oldChallenges = Object.keys(user.challengesHash).filter(function (challenge) { - // console.log(challenge); - // return user.challengesHash[challenge]; - // }).map(function (data) { - // return ({ - // challengeNum: data, - // timeStamp: user.challengesHash[data] - // }); - // }); - // oldChallenges.forEach(function (challenge) { - // user.progressTimestamps.push(challenge.timeStamp); - // }); - // newChallenges = newChallenges.filter(function (elem) { - // return elem.newId; - // }); - // console.log(newChallenges); - //}); -//});