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 {
|
|
|
|
userPropsForSession,
|
|
|
|
normaliseUserFields
|
|
|
|
} from '../utils/publicUserProps';
|
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',
|
|
|
|
read: (req, resource, params, config, cb) => {
|
2018-01-12 11:25:48 -08:00
|
|
|
const { user } = req;
|
|
|
|
Observable.if(
|
|
|
|
() => !user,
|
|
|
|
Observable.of({}),
|
2018-01-17 10:45:16 -08:00
|
|
|
Observable.defer(() => user.getChallengeMap$())
|
2016-06-20 11:35:19 -07:00
|
|
|
.map(challengeMap => ({ ...user.toJSON(), challengeMap }))
|
2018-01-12 11:25:48 -08:00
|
|
|
.map(user => ({
|
2018-02-16 23:18:53 +00:00
|
|
|
entities: {
|
|
|
|
user: {
|
|
|
|
[user.username]: {
|
|
|
|
..._.pick(user, userPropsForSession),
|
|
|
|
isEmailVerified: !!user.emailVerified,
|
|
|
|
isGithub: !!user.githubURL,
|
|
|
|
isLinkedIn: !!user.linkedIn,
|
|
|
|
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
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|