Change migration middleware to not rely on boolean flag in User model

This commit is contained in:
terakilobyte
2015-05-25 19:55:18 -04:00
parent 0debdc5fd6
commit 5f169001f6
4 changed files with 99 additions and 100 deletions

13
app.js
View File

@ -216,10 +216,6 @@ app.use(function (req, res, next) {
next(); next();
}); });
// User migration middleware
app.use(userController.userMigration);
/** /**
* Main routes. * Main routes.
*/ */
@ -540,14 +536,19 @@ app.post('/completed-field-guide/', fieldGuideController.completedFieldGuide);
* Challenge related routes * Challenge related routes
*/ */
app.get('/challenges/next-challenge', challengeController.returnNextChallenge); app.get('/challenges/next-challenge',
userController.userMigration,
challengeController.returnNextChallenge);
app.get( app.get(
'/challenges/:challengeName', '/challenges/:challengeName',
userController.userMigration,
challengeController.returnIndividualChallenge challengeController.returnIndividualChallenge
); );
app.get('/challenges/', challengeController.returnCurrentChallenge); app.get('/challenges/',
userController.userMigration,
challengeController.returnCurrentChallenge);
// todo refactor these routes // todo refactor these routes
app.post('/completed-challenge/', challengeController.completedChallenge); app.post('/completed-challenge/', challengeController.completedChallenge);

View File

@ -6,7 +6,7 @@ var _ = require('lodash'),
User = require('../models/User'), User = require('../models/User'),
secrets = require('../config/secrets'), secrets = require('../config/secrets'),
moment = require('moment'), moment = require('moment'),
debug = require('debug')('freecc:cntr:challenges'), debug = require('debug')('freecc:cntr:userController'),
resources = require('./resources'), resources = require('./resources'),
R = require('ramda'); R = require('ramda');
@ -21,15 +21,17 @@ var _ = require('lodash'),
* challenge structure * challenge structure
*/ */
exports.userMigration = function(req, res, next) { exports.userMigration = function(req, res, next) {
if (req.user && req.user.completedChallenges.length === 0) {
debug('user migration called'); debug('user migration called');
var user = req.user; debug('Completed coursewares', req.user.completedCoursewares);
if (!user.migratedToUnifiedChallengeStructure && user) { debug('Completed bonfires', req.user.completedBonfires);
user.migratedToUnifiedChallengeStructure = true; req.user.completedChallenges = R.filter(function (elem) {
user.completedChallenges = R.filter(function (elem) {
return elem; // getting rid of undefined return elem; // getting rid of undefined
}, R.concat( }, R.concat(
user.completedCoursewares, req.user.completedCoursewares,
user.completedBonfires.map(function (bonfire) { req.user.completedBonfires.map(function (bonfire) {
debug('Completed coursewares', req.user.completedCoursewares);
debug('Completed bonfires', req.user.completedBonfires);
return ({ return ({
completedDate: bonfire.completedDate, completedDate: bonfire.completedDate,
_id: bonfire._id, _id: bonfire._id,
@ -42,15 +44,11 @@ exports.userMigration = function(req, res, next) {
}); });
}) })
)); ));
user.save(function (err) { debug(req.user.completedChallenges);
if (err) { next();
next(err);
} else { } else {
next(req, res); next();
} }
})
}
next(req, res);
}; };
/** /**

View File

@ -168,7 +168,7 @@ var userSchema = new mongoose.Schema({
} }
} }
], ],
uncompletedChallenges: Array uncompletedChallenges: Array,
}); });
/** /**

View File

@ -103,7 +103,7 @@
"Complete \"Update\"", "Complete \"Update\"",
"Complete \"RM\"", "Complete \"RM\"",
"Complete \"Finale\"", "Complete \"Finale\"",
"Once you've completed these first 7 challenges, move on to our next waypoint.", "Once you've completed these first 7 challenges, move on to our next waypoint."
], ],
"challengeType": 2, "challengeType": 2,
"tests": [] "tests": []
@ -135,7 +135,7 @@
"Complete \"Filtered LS\"", "Complete \"Filtered LS\"",
"Complete \"Make it Modular\"", "Complete \"Make it Modular\"",
"Complete \"HTTP Client\"", "Complete \"HTTP Client\"",
"Once you've completed these first 7 challenges, move on to our next waypoint.", "Once you've completed these first 7 challenges, move on to our next waypoint."
], ],
"challengeType": 2, "challengeType": 2,
"tests": [] "tests": []