Files
freeCodeCamp/server/services/user.js
Stuart Taylor 3131c55782 feat(Profile): Reactify profile page (#16743)
* feat(Profile): Reactify profile page

* chore(tidyup): Remove console.log

* fix(timeline): Remove legacy challenges from Timeline render

* fix(style): Remove underline on a:hover
2018-02-19 14:32:14 -06:00

63 lines
1.6 KiB
JavaScript

import { Observable } from 'rx';
import _ from 'lodash';
import {
getProgress,
normaliseUserFields,
userPropsForSession
} from '../utils/publicUserProps';
export default function userServices() {
return {
name: 'user',
read: function readUserService(
req,
resource,
params,
config,
cb) {
const queryUser = req.user;
const source = queryUser && Observable.forkJoin(
queryUser.getChallengeMap$(),
queryUser.getPoints$(),
(challengeMap, progressTimestamps) => ({
challengeMap,
progress: getProgress(progressTimestamps, queryUser.timezone)
})
);
Observable.if(
() => !queryUser,
Observable.of({}),
Observable.defer(() => source)
.map(({ challengeMap, progress }) => ({
...queryUser.toJSON(),
...progress,
challengeMap
}))
.map(
user => ({
entities: {
user: {
[user.username]: {
..._.pick(user, userPropsForSession),
isEmailVerified: !!user.emailVerified,
isGithub: !!user.githubURL,
isLinkedIn: !!user.linkedIn,
isTwitter: !!user.twitter,
isWebsite: !!user.website,
...normaliseUserFields(user)
}
}
},
result: user.username
})
)
)
.subscribe(
user => cb(null, user),
cb
);
}
};
}