feature make completedChallenges uniq

now when users complete a challenge, it will instead update the
last save if it exists.
This commit is contained in:
Berkeley Martinez
2015-10-01 21:44:24 -07:00
parent fefefed0f2
commit 6c305dbc67
2 changed files with 39 additions and 37 deletions

View File

@@ -34,22 +34,52 @@ const dasherize = utils.dasherize;
const unDasherize = utils.unDasherize;
const getMDNLinks = utils.getMDNLinks;
function makeChallengesUnique(challengeArr) {
// clone and reverse challenges
// then filter by unique id's
// then reverse again
return _.uniq(challengeArr.slice().reverse(), 'id').reverse();
}
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
function updateUserProgress(user, challengeId, completedChallenge) {
const alreadyCompleted = user.completedChallenges.some(({ id }) => {
return id === challengeId;
let { completedChallenges } = user;
// migrate user challenges object to remove
if (!user.isUniqMigrated) {
user.isUniqMigrated = true;
completedChallenges = user.completedChallenges =
makeChallengesUnique(completedChallenges);
}
const indexOfChallenge = _.findIndex(completedChallenges, {
id: challengeId
});
const alreadyCompleted = indexOfChallenge !== -1;
if (!alreadyCompleted) {
user.progressTimestamps.push({
timestamp: Date.now(),
completedChallenge
completedChallenge: challengeId
});
user.completedChallenges.push(completedChallenge);
return user;
}
user.completedChallenges.push(completedChallenge);
const oldCompletedChallenge = completedChallenges[indexOfChallenge];
user.completedChallenges[indexOfChallenge] =
Object.assign(
{},
completedChallenge,
{
completedDate: oldCompletedChallenge.completedDate,
lastUpdated: completedChallenge.completedDate
}
);
return user;
}