74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 *
 | 
						|
 * Any ref to fixCompletedChallengesItem should be removed post
 | 
						|
 * a db migration to fix all completedChallenges
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
import { Observable } from 'rx';
 | 
						|
import _ from 'lodash';
 | 
						|
 | 
						|
import {
 | 
						|
  getProgress,
 | 
						|
  normaliseUserFields,
 | 
						|
  userPropsForSession
 | 
						|
} from '../utils/publicUserProps';
 | 
						|
import { fixCompletedChallengeItem } from '../../common/utils';
 | 
						|
 | 
						|
export default function userServices() {
 | 
						|
  return {
 | 
						|
    name: 'user',
 | 
						|
    read: function readUserService(
 | 
						|
      req,
 | 
						|
      resource,
 | 
						|
      params,
 | 
						|
      config,
 | 
						|
      cb) {
 | 
						|
      const queryUser = req.user;
 | 
						|
      console.log(queryUser.completedChallengeCount)
 | 
						|
      const source = queryUser && Observable.forkJoin(
 | 
						|
        queryUser.getCompletedChallenges$(),
 | 
						|
        queryUser.getPoints$(),
 | 
						|
        (completedChallenges, progressTimestamps) => ({
 | 
						|
          completedChallenges,
 | 
						|
          progress: getProgress(progressTimestamps, queryUser.timezone)
 | 
						|
        })
 | 
						|
      );
 | 
						|
      Observable.if(
 | 
						|
        () => !queryUser,
 | 
						|
        Observable.of({}),
 | 
						|
        Observable.defer(() => source)
 | 
						|
          .map(({ completedChallenges, progress }) => ({
 | 
						|
            ...queryUser.toJSON(),
 | 
						|
            ...progress,
 | 
						|
            completedChallenges: completedChallenges.map(
 | 
						|
              fixCompletedChallengeItem
 | 
						|
            )
 | 
						|
          }))
 | 
						|
          .map(
 | 
						|
            user => ({
 | 
						|
              entities: {
 | 
						|
                user: {
 | 
						|
                  [user.username]: {
 | 
						|
                    ..._.pick(user, userPropsForSession),
 | 
						|
                    isEmailVerified: !!user.emailVerified,
 | 
						|
                    isGithub: !!user.githubProfile,
 | 
						|
                    isLinkedIn: !!user.linkedin,
 | 
						|
                    isTwitter: !!user.twitter,
 | 
						|
                    isWebsite: !!user.website,
 | 
						|
                    ...normaliseUserFields(user)
 | 
						|
                  }
 | 
						|
                }
 | 
						|
              },
 | 
						|
              result: user.username
 | 
						|
            })
 | 
						|
          )
 | 
						|
        )
 | 
						|
        .subscribe(
 | 
						|
          user => cb(null, user),
 | 
						|
          cb
 | 
						|
        );
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 |