37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
|
import dedent from 'dedent';
|
||
|
import debugFactory from 'debug';
|
||
|
import { Observable } from 'rx';
|
||
|
|
||
|
import commitGoals from './commit-goals.json';
|
||
|
const debug = debugFactory('freecc:utils/commit');
|
||
|
|
||
|
export { commitGoals };
|
||
|
|
||
|
export function completeCommitment$(user) {
|
||
|
const { isFrontEndCert, isFullStackCert } = user;
|
||
|
return Observable.fromNodeCallback(user.pledge, user)()
|
||
|
.flatMap(pledge => {
|
||
|
if (!pledge) {
|
||
|
return Observable.just('No pledge found');
|
||
|
}
|
||
|
|
||
|
const { goal } = pledge;
|
||
|
|
||
|
if (
|
||
|
isFrontEndCert && goal === commitGoals.frontEndCert ||
|
||
|
isFullStackCert && goal === commitGoals.fullStackCert
|
||
|
) {
|
||
|
debug('marking goal complete');
|
||
|
pledge.isCompleted = true;
|
||
|
pledge.dateEnded = new Date();
|
||
|
pledge.formerUserId = pledge.userId;
|
||
|
pledge.userId = null;
|
||
|
return Observable.fromNodeCallback(pledge.save, pledge)();
|
||
|
}
|
||
|
return Observable.just(dedent`
|
||
|
You have not yet reached your goal of completing the ${goal}
|
||
|
Please retry when you have met the requirements.
|
||
|
`);
|
||
|
});
|
||
|
}
|