Commit uses challengeMap
This commit is contained in:
@ -1,17 +1,14 @@
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import dedent from 'dedent';
|
import dedent from 'dedent';
|
||||||
import { Observable } from 'rx';
|
import { Observable } from 'rx';
|
||||||
import debugFactory from 'debug';
|
import debug from 'debug';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ifNoUser401,
|
ifNoUser401,
|
||||||
ifNoUserSend
|
ifNoUserSend
|
||||||
} from '../utils/middleware';
|
} from '../utils/middleware';
|
||||||
|
|
||||||
import {
|
import { observeQuery } from '../utils/rx';
|
||||||
saveUser,
|
|
||||||
observeQuery
|
|
||||||
} from '../utils/rx';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
frontEndChallengeId,
|
frontEndChallengeId,
|
||||||
@ -25,17 +22,13 @@ import {
|
|||||||
|
|
||||||
import certTypes from '../utils/certTypes.json';
|
import certTypes from '../utils/certTypes.json';
|
||||||
|
|
||||||
const debug = debugFactory('freecc:certification');
|
const log = debug('freecc:certification');
|
||||||
const sendMessageToNonUser = ifNoUserSend(
|
const sendMessageToNonUser = ifNoUserSend(
|
||||||
'must be logged in to complete.'
|
'must be logged in to complete.'
|
||||||
);
|
);
|
||||||
|
|
||||||
function isCertified(ids, { completedChallenges }) {
|
function isCertified(ids, challengeMap = {}) {
|
||||||
return _.every(ids, ({ id }) => {
|
return _.every(ids, ({ id }) => challengeMap[id]);
|
||||||
return _.some(completedChallenges, (challenge) => {
|
|
||||||
return challenge.id === id || challenge._id === id;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getIdsForCert$(id, Challenge) {
|
function getIdsForCert$(id, Challenge) {
|
||||||
@ -90,12 +83,9 @@ export default function certificate(app) {
|
|||||||
app.use(router);
|
app.use(router);
|
||||||
|
|
||||||
function verifyCert(certType, req, res, next) {
|
function verifyCert(certType, req, res, next) {
|
||||||
Observable.just({})
|
|
||||||
.flatMap(() => {
|
|
||||||
return certTypeIds[certType];
|
|
||||||
})
|
|
||||||
.flatMap(challenge => {
|
|
||||||
const { user } = req;
|
const { user } = req;
|
||||||
|
return certTypeIds[certType]()
|
||||||
|
.flatMap(challenge => {
|
||||||
const {
|
const {
|
||||||
id,
|
id,
|
||||||
tests,
|
tests,
|
||||||
@ -104,38 +94,39 @@ export default function certificate(app) {
|
|||||||
} = challenge;
|
} = challenge;
|
||||||
if (
|
if (
|
||||||
!user[certType] &&
|
!user[certType] &&
|
||||||
isCertified(tests, user)
|
isCertified(tests, user.challengeMap)
|
||||||
) {
|
) {
|
||||||
user[certType] = true;
|
const updateData = {
|
||||||
user.completedChallenges.push({
|
$set: {
|
||||||
|
[`challengeMap.${id}`]: {
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
completedDate: new Date(),
|
completedDate: new Date(),
|
||||||
challengeType
|
challengeType
|
||||||
});
|
},
|
||||||
|
[certType]: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return saveUser(user)
|
return req.user.udate$(updateData)
|
||||||
// If user has commited to nonprofit,
|
// If user has commited to nonprofit,
|
||||||
// this will complete his pledge
|
// this will complete his pledge
|
||||||
.flatMap(
|
.flatMap(
|
||||||
user => completeCommitment$(user),
|
() => completeCommitment$(user),
|
||||||
(user, pledgeOrMessage) => {
|
({ count }, pledgeOrMessage) => {
|
||||||
if (typeof pledgeOrMessage === 'string') {
|
if (typeof pledgeOrMessage === 'string') {
|
||||||
debug(pledgeOrMessage);
|
log(pledgeOrMessage);
|
||||||
}
|
}
|
||||||
// we are only interested in the user object
|
log(`${count} documents updated`);
|
||||||
// so we ignore return from completeCommitment$
|
return true;
|
||||||
return user;
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return Observable.just(user);
|
return Observable.just(false);
|
||||||
})
|
})
|
||||||
.subscribe(
|
.subscribe(
|
||||||
user => {
|
(didCertify) => {
|
||||||
if (
|
if (didCertify) {
|
||||||
user[certType]
|
|
||||||
) {
|
|
||||||
return res.status(200).send(true);
|
return res.status(200).send(true);
|
||||||
}
|
}
|
||||||
return res.status(200).send(
|
return res.status(200).send(
|
||||||
@ -150,13 +141,8 @@ export default function certificate(app) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function postHonest(req, res, next) {
|
function postHonest(req, res, next) {
|
||||||
const { user } = req;
|
return req.user.update$({ $set: { isHonest: true } }).subscribe(
|
||||||
user.isHonest = true;
|
() => res.status(200).send(true),
|
||||||
saveUser(user)
|
|
||||||
.subscribe(
|
|
||||||
(user) => {
|
|
||||||
res.status(200).send(!!user.isHonest);
|
|
||||||
},
|
|
||||||
next
|
next
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user