| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  | function getCompletedCertCount(user) { | 
					
						
							|  |  |  |   return [ | 
					
						
							|  |  |  |     'isApisMicroservicesCert', | 
					
						
							|  |  |  |     'is2018DataVisCert', | 
					
						
							|  |  |  |     'isFrontEndLibsCert', | 
					
						
							| 
									
										
										
										
											2020-06-18 00:00:31 +09:00
										 |  |  |     'isQaCertV7', | 
					
						
							|  |  |  |     'isInfosecCertV7', | 
					
						
							| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  |     'isJsAlgoDataStructCert', | 
					
						
							| 
									
										
										
										
											2020-02-25 00:10:32 +05:30
										 |  |  |     'isRespWebDesignCert', | 
					
						
							| 
									
										
										
										
											2020-06-18 00:00:31 +09:00
										 |  |  |     'isSciCompPyCertV7', | 
					
						
							|  |  |  |     'isDataAnalysisPyCertV7', | 
					
						
							|  |  |  |     'isMachineLearningPyCertV7' | 
					
						
							| 
									
										
										
										
											2019-02-06 14:19:58 +00:00
										 |  |  |   ].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0); | 
					
						
							| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getLegacyCertCount(user) { | 
					
						
							| 
									
										
										
										
											2020-04-23 09:08:50 -04:00
										 |  |  |   return [ | 
					
						
							|  |  |  |     'isFrontEndCert', | 
					
						
							|  |  |  |     'isBackEndCert', | 
					
						
							|  |  |  |     'isDataVisCert', | 
					
						
							|  |  |  |     'isInfosecQaCert' | 
					
						
							|  |  |  |   ].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0); | 
					
						
							| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default function populateUser(db, user) { | 
					
						
							|  |  |  |   return new Promise((resolve, reject) => { | 
					
						
							| 
									
										
										
										
											2019-02-06 14:19:58 +00:00
										 |  |  |     let populatedUser = { ...user }; | 
					
						
							| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  |     db.collection('user') | 
					
						
							| 
									
										
										
										
											2019-02-06 14:19:58 +00:00
										 |  |  |       .aggregate([ | 
					
						
							|  |  |  |         { $match: { _id: user.id } }, | 
					
						
							| 
									
										
										
										
											2019-02-16 00:31:05 +00:00
										 |  |  |         { $project: { points: { $size: '$progressTimestamps' } } } | 
					
						
							| 
									
										
										
										
											2019-02-06 14:19:58 +00:00
										 |  |  |       ]) | 
					
						
							|  |  |  |       .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); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |