| 
									
										
										
										
											2018-06-07 22:35:06 +01: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 13:00:29 +03:00
										 |  |  |     ]).get(function(err, [{ points = 1 } = {}]) { | 
					
						
							| 
									
										
										
										
											2018-06-07 22:35:06 +01: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); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |