| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  | function getCompletedCertCount(user) { | 
					
						
							|  |  |  |   return [ | 
					
						
							|  |  |  |     'isApisMicroservicesCert', | 
					
						
							|  |  |  |     'is2018DataVisCert', | 
					
						
							|  |  |  |     'isFrontEndLibsCert', | 
					
						
							|  |  |  |     'isInfosecQaCert', | 
					
						
							|  |  |  |     'isJsAlgoDataStructCert', | 
					
						
							|  |  |  |     'isRespWebDesignCert' | 
					
						
							| 
									
										
										
										
											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) { | 
					
						
							| 
									
										
										
										
											2019-02-06 14:19:58 +00:00
										 |  |  |   return ['isFrontEndCert', 'isBackEndCert', 'isDataVisCert'].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
										 |  |  |   }); | 
					
						
							|  |  |  | } |