source: Dev/trunk/src/server/api/responses.js @ 531

Last change on this file since 531 was 531, checked in by hendrikvanantwerpen, 11 years ago
  • Return to using truly ISO formatted dates, including milliseconds.
  • Also set constraint on surveyrun dates when value is initially set.
  • Separate runs & results from surveys and questions.
  • Moved date & email format to schema itself.
File size: 2.5 KB
RevLine 
[525]1var express = require("express")
2  , HTTPResult = require("../util/http-result")
3  , etags = require("../util/etags")
4  , cryptoken = require("../util/crypto-token")
5  , _ = require('underscore')
6  ;
7
8module.exports = function(couch,schema) {
9    var exports = {};
10
11    var util = require('./util')(couch,schema);
12    var app = exports.app = express();
13
14    var getResponsesBySurveyRunId = exports.getResponsesBySurveyRunId = function(surveyRunId) {
[531]15        return couch.get('_design/responses/_view/by_surveyrun',
16                         {query:{key:surveyRunId,reduce:false,include_docs:true}})
[525]17        .handle({
[527]18            '-1': _.identity,
[531]19            200: util.handleRowDocs,
[525]20            default: util.handleUnknownResponse
21        });
22    };
23
24    app.get('/',
25        util.ensureMIME(util.JSON_MIME),
26        function(req,res){
27            var hr;
28            if ( 'surveyRunId' in req.query ) {
29                hr = getResponsesBySurveyRunId(req.query.surveyRunId);
30            } else {
31                hr = util.getDocumentsOfType('Response');
32            }
[527]33            hr.handle({'-1': util.handleException})
34              .handle(res.send.bind(res));
[525]35        });
36    app.get('/:id',
37        util.ensureMIME(util.JSON_MIME),
38        util.makeDocGet_id('Response'));
39    app.post('/api/responses',
40        util.ensureMIME(util.JSON_MIME),
41        function (req,res) {
42            var doc = req.body;
43            cryptoken()
44            .then(function(token) {
45                doc.secret = token;
46                return util.postDocument('Response',doc);
47            })
[527]48            .handle({'-1': util.handleException})
[525]49            .handle(res.send.bind(res));
50        });
51    app.put('/:id',
52        util.ensureMIME(util.JSON_MIME),
53        function (req,res) {
54            var id = req.params.id;
55            var doc = req.body;
56            var rev = etags.parse(req.header('If-Match'))[0] || (doc && doc._rev);
57            var hr;
58            if ( typeof doc.secret === 'undefined' ) {
59                hr = util.randomToken()
60                .handle({
61                    201: function(token) {
62                        doc.secret = token;
63                        return util.putDocument(id,rev,'Response',doc);
64                    }
65                });
66            } else {
67                hr = util.putDocument(id,rev,'Response',doc);
68            }
[527]69            hr.handle({'-1': util.handleException})
70              .handle(res.send.bind(res));
[525]71        });
72    app.delete('/:id',
73        util.ensureMIME(util.JSON_MIME),
74        util.makeDocDel_id('Response'));
75    return exports;
76};
Note: See TracBrowser for help on using the repository browser.