70 lines
1.4 KiB
JavaScript
70 lines
1.4 KiB
JavaScript
import debug from 'debug';
|
|
import _ from 'lodash';
|
|
|
|
const publicUserProps = [
|
|
'id',
|
|
'name',
|
|
'username',
|
|
'bio',
|
|
'theme',
|
|
'picture',
|
|
'points',
|
|
'email',
|
|
'languageTag',
|
|
|
|
'isCheater',
|
|
'isGithubCool',
|
|
|
|
'isLocked',
|
|
'isFrontEndCert',
|
|
'isBackEndCert',
|
|
'isDataVisCert',
|
|
'isFullStackCert',
|
|
|
|
'githubURL',
|
|
'sendMonthlyEmail',
|
|
'sendNotificationEmail',
|
|
'sendQuincyEmail',
|
|
|
|
'currentChallengeId',
|
|
'challengeMap'
|
|
];
|
|
const log = debug('fcc:services:user');
|
|
|
|
export default function userServices() {
|
|
return {
|
|
name: 'user',
|
|
read: (req, resource, params, config, cb) => {
|
|
let { user } = req;
|
|
if (user) {
|
|
log('user is signed in');
|
|
return user.getChallengeMap$()
|
|
.map(challengeMap => ({ ...user.toJSON(), challengeMap }))
|
|
.subscribe(
|
|
user => cb(
|
|
null,
|
|
{
|
|
entities: {
|
|
user: {
|
|
[user.username]: {
|
|
..._.pick(user, publicUserProps),
|
|
isTwitter: !!user.twitter,
|
|
isLinkedIn: !!user.linkedIn
|
|
}
|
|
}
|
|
},
|
|
result: user.username
|
|
}
|
|
),
|
|
cb
|
|
);
|
|
}
|
|
debug('user is not signed in');
|
|
// Zalgo!!!
|
|
return process.nextTick(() => {
|
|
cb(null, {});
|
|
});
|
|
}
|
|
};
|
|
}
|