53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.6 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' } } }
 | 
						|
    ], 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);
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 |