| 
									
										
										
										
											2018-06-12 16:50:35 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Any ref to fixCompletedChallengesItem should be removed post | 
					
						
							|  |  |  |  * a db migration to fix all completedChallenges | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-12 11:25:48 -08:00
										 |  |  | import { Observable } from 'rx'; | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  | import _ from 'lodash'; | 
					
						
							| 
									
										
										
										
											2015-07-24 17:52:07 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  | import { | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |   getProgress, | 
					
						
							|  |  |  |   normaliseUserFields, | 
					
						
							|  |  |  |   userPropsForSession | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  | } from '../utils/publicUserProps'; | 
					
						
							| 
									
										
										
										
											2018-06-12 16:50:35 +01:00
										 |  |  | import { fixCompletedChallengeItem } from '../../common/utils'; | 
					
						
							| 
									
										
										
										
											2015-07-24 17:52:07 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 17:09:26 -07:00
										 |  |  | export default function userServices() { | 
					
						
							| 
									
										
										
										
											2015-07-24 17:52:07 -07:00
										 |  |  |   return { | 
					
						
							|  |  |  |     name: 'user', | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |     read: function readUserService( | 
					
						
							|  |  |  |       req, | 
					
						
							|  |  |  |       resource, | 
					
						
							|  |  |  |       params, | 
					
						
							|  |  |  |       config, | 
					
						
							|  |  |  |       cb) { | 
					
						
							|  |  |  |       const queryUser = req.user; | 
					
						
							| 
									
										
										
										
											2018-08-24 14:32:54 +01:00
										 |  |  |       console.log(queryUser.completedChallengeCount) | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |       const source = queryUser && Observable.forkJoin( | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |         queryUser.getCompletedChallenges$(), | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |         queryUser.getPoints$(), | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |         (completedChallenges, progressTimestamps) => ({ | 
					
						
							|  |  |  |           completedChallenges, | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |           progress: getProgress(progressTimestamps, queryUser.timezone) | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |       ); | 
					
						
							| 
									
										
										
										
											2018-01-12 11:25:48 -08:00
										 |  |  |       Observable.if( | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |         () => !queryUser, | 
					
						
							| 
									
										
										
										
											2018-01-12 11:25:48 -08:00
										 |  |  |         Observable.of({}), | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |         Observable.defer(() => source) | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |           .map(({ completedChallenges, progress }) => ({ | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |             ...queryUser.toJSON(), | 
					
						
							|  |  |  |             ...progress, | 
					
						
							| 
									
										
										
										
											2018-06-12 16:50:35 +01:00
										 |  |  |             completedChallenges: completedChallenges.map( | 
					
						
							|  |  |  |               fixCompletedChallengeItem | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  |           })) | 
					
						
							|  |  |  |           .map( | 
					
						
							|  |  |  |             user => ({ | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |               entities: { | 
					
						
							|  |  |  |                 user: { | 
					
						
							|  |  |  |                   [user.username]: { | 
					
						
							|  |  |  |                     ..._.pick(user, userPropsForSession), | 
					
						
							|  |  |  |                     isEmailVerified: !!user.emailVerified, | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |                     isGithub: !!user.githubProfile, | 
					
						
							| 
									
										
										
										
											2018-08-08 21:52:48 +01:00
										 |  |  |                     isLinkedIn: !!user.linkedin, | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |                     isTwitter: !!user.twitter, | 
					
						
							|  |  |  |                     isWebsite: !!user.website, | 
					
						
							|  |  |  |                     ...normaliseUserFields(user) | 
					
						
							|  |  |  |                   } | 
					
						
							| 
									
										
										
										
											2018-01-12 11:25:48 -08:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |               }, | 
					
						
							|  |  |  |               result: user.username | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-01-12 11:25:48 -08:00
										 |  |  |         .subscribe( | 
					
						
							|  |  |  |           user => cb(null, user), | 
					
						
							|  |  |  |           cb | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2015-07-24 17:52:07 -07:00
										 |  |  |     } | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |