From d9d049540bb7d9840e244fba35934e314ccdfc92 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Wed, 8 Jun 2016 11:26:33 -0700 Subject: [PATCH] Submit simple project (previously known as video challegnes) --- .../challenges/redux/completion-saga.js | 41 ++++++++++++++++++- server/boot/challenge.js | 12 ++++-- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/common/app/routes/challenges/redux/completion-saga.js b/common/app/routes/challenges/redux/completion-saga.js index bceb398290b..86cddd4ec4e 100644 --- a/common/app/routes/challenges/redux/completion-saga.js +++ b/common/app/routes/challenges/redux/completion-saga.js @@ -129,10 +129,49 @@ function submitProject(type, state, { solution, githubLink }) { return Observable.merge(saveChallenge$, challengeCompleted$); } +function submitSimpleProject(type, state) { + const { + challenge: { id } + } = challengeSelector(state); + const { + app: { isSignedIn, csrfToken } + } = state; + const body = { + id, + _csrf: csrfToken + }; + const saveChallenge$ = postJSON$('/challenge-completed', body) + .retry(3) + .flatMap(({ alreadyCompleted, points }) => { + return Observable.of( + makeToast({ + message: + 'Challenge saved.' + + (alreadyCompleted ? '' : ' First time Completed!'), + title: 'Saved', + type: 'info' + }), + updatePoints(points) + ); + }) + .catch(createErrorObservable); + + const challengeCompleted$ = Observable.of( + makeToast({ + title: randomCompliment(), + message: isSignedIn ? ' Saving...' : 'Moving on to next challenge.', + type: 'success' + }) + // moveToNextChallenge() + ); + return Observable.merge(saveChallenge$, challengeCompleted$); +} + const submitTypes = { tests: submitModern, 'project.frontEnd': submitProject, - 'project.backEnd': submitProject + 'project.backEnd': submitProject, + 'project.simple': submitSimpleProject }; export default function completionSaga(actions$, getState) { diff --git a/server/boot/challenge.js b/server/boot/challenge.js index 51546550480..5994444c178 100644 --- a/server/boot/challenge.js +++ b/server/boot/challenge.js @@ -68,12 +68,20 @@ module.exports = function(app) { modernChallengeCompleted ); + // deprecate endpoint + // remove once new endpoint is live router.post( '/completed-challenge', send200toNonUser, completedChallenge ); + router.post( + '/challenge-completed', + send200toNonUser, + completedChallenge + ); + // deprecate endpoint // remove once new endpoint is live router.post( @@ -144,11 +152,7 @@ module.exports = function(app) { function completedChallenge(req, res, next) { req.checkBody('id', 'id must be an ObjectId').isMongoId(); - req.checkBody('challengeType', 'challengeType must be an integer') - .isNumber(); - const type = accepts(req).type('html', 'json', 'text'); - const errors = req.validationErrors(true); if (errors) {