Changeset 496


Ignore:
Timestamp:
03/10/14 01:05:22 (11 years ago)
Author:
hendrikvanantwerpen
Message:

Reject surveys with duplicate questions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk/src/server/app.js

    r495 r496  
    502502
    503503    // Surveys
     504    function areSurveyQuestionsUnique(survey) {
     505        return _.chain(survey.questions)
     506                .map(function(q){ return q.code; })
     507                .uniq()
     508                .value().length === survey.questions.length;
     509    }
    504510    app.get('/api/surveys',
    505511        ensureAuthenticated,
     
    527533        ensureAuthenticated,
    528534        ensureMIME(JSON_MIME),
    529         makeDocPost('Survey'));
     535        function(req,res) {
     536            var doc = req.body;
     537            var hr;
     538            if ( !areSurveyQuestionsUnique(doc) ) {
     539                hr = new HTTPResult(400,{error:"Survey contains duplicate questions."});
     540            } else {
     541                hr = postDocument('Survey',doc);
     542            }
     543            hr.handle(res.send.bind(res));
     544        });
    530545    app.get('/api/surveys/:id',
    531546        ensureAuthenticated,
     
    535550        ensureAuthenticated,
    536551        ensureMIME(JSON_MIME),
    537         makeDocPut_id('Survey'));
     552        function(req,res) {
     553            var id = req.params.id;
     554            var doc = req.body;
     555            var rev = etags.parse(req.header('If-Match'))[0] || (doc && doc._rev);
     556            var hr;
     557            if ( !areSurveyQuestionsUnique(doc) ) {
     558                new HTTPResult(400,{error:"Survey contains duplicate questions."})
     559                .handle(res.send.bind(res));
     560            } else {
     561                putDocument(id,rev,'Survey',doc)
     562                .handle({
     563                    201: function(doc) {
     564                        res.set({
     565                            'ETag': etags.format([doc._rev])
     566                        }).send(201, doc);
     567                    },
     568                    default: res.send.bind(res)
     569                });
     570            }
     571        });
    538572    app.delete('/api/surveys/:id',
    539573        ensureAuthenticated,
Note: See TracChangeset for help on using the changeset viewer.