2018-06-07 21:35:06 +00:00
|
|
|
|
|
|
|
function getCompletedCertCount(user) {
|
|
|
|
return [
|
|
|
|
'isApisMicroservicesCert',
|
|
|
|
'is2018DataVisCert',
|
|
|
|
'isFrontEndLibsCert',
|
|
|
|
'isInfosecQaCert',
|
|
|
|
'isJsAlgoDataStructCert',
|
|
|
|
'isRespWebDesignCert'
|
|
|
|
].reduce((sum, key) => user[key] ? sum + 1 : sum, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
function getLegacyCertCount(user) {
|
|
|
|
return [
|
|
|
|
'isFrontEndCert',
|
|
|
|
'isBackEndCert',
|
|
|
|
'isDataVisCert'
|
|
|
|
].reduce((sum, key) => user[key] ? sum + 1 : sum, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default function populateUser(db, user) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
let populatedUser = {...user};
|
|
|
|
db.collection('user')
|
|
|
|
.aggregate([
|
|
|
|
{ $match: { _id: user.id } },
|
|
|
|
{ $project: { points: { $size: '$progressTimestamps' } } }
|
2018-10-08 10:00:29 +00:00
|
|
|
]).get(function(err, [{ points = 1 } = {}]) {
|
2018-06-07 21:35:06 +00:00
|
|
|
if (err) { return reject(err); }
|
|
|
|
user.points = points;
|
|
|
|
let completedChallengeCount = 0;
|
|
|
|
let completedProjectCount = 0;
|
|
|
|
if ('completedChallenges' in user) {
|
|
|
|
completedChallengeCount = user.completedChallenges.length;
|
|
|
|
user.completedChallenges.forEach(item => {
|
|
|
|
if (
|
|
|
|
'challengeType' in item &&
|
|
|
|
(item.challengeType === 3 || item.challengeType === 4)
|
|
|
|
) {
|
|
|
|
completedProjectCount++;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
populatedUser.completedChallengeCount = completedChallengeCount;
|
|
|
|
populatedUser.completedProjectCount = completedProjectCount;
|
|
|
|
populatedUser.completedCertCount = getCompletedCertCount(user);
|
|
|
|
populatedUser.completedLegacyCertCount = getLegacyCertCount(user);
|
|
|
|
populatedUser.completedChallenges = [];
|
|
|
|
return resolve(populatedUser);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|