54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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' } } }
 | 
						|
      ])
 | 
						|
      .get(function(err, [{ points = 1 } = {}]) {
 | 
						|
        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);
 | 
						|
      });
 | 
						|
  });
 | 
						|
}
 |