forked from LocalData/localdata-api
-
Notifications
You must be signed in to change notification settings - Fork 2
/
collectors.js
94 lines (86 loc) · 3.06 KB
/
collectors.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* ==================================================
* Collectors
* ==================================================
*/
var util = require('./util');
module.exports = {
setup: setup
};
var handleError = util.handleError;
/*
* app: express server
* db: mongodb database
* idgen: unique ID generator
* collectionName: name of collectors collection
*/
function setup(app, db, idgen, collectionName) {
function getCollection(cb) {
return db.collection(collectionName, cb);
}
// Get a collector
// GET http://localhost:3000/surveys/{SURVEY ID}/collectors/{COLLECTOR ID}
// GET http://localhost:3000/surveys/1/collectors/2ec140e0-827f-11e1-83d8-bf682a6ee038
app.get('/surveys/:sid/collectors/:cid', function(req, response) {
var surveyid = req.params.sid;
var cid = req.params.cid;
getCollection(function(err, collection) {
collection.find({'survey': surveyid, 'id': cid}, function(err, cursor) {
if (handleError(err, response)) return;
cursor.toArray(function(err, items) {
if (items.length > 1) {
console.log('!!! WARNING: There should only be one collector with a given id attached to a survey.');
console.log('!!! Found ' + items.length);
console.log('!!! Responses: ' + JSON.stringify(items));
}
if (items.length > 0) {
response.send({collector: items[0]});
} else {
response.send({});
}
});
});
});
});
// Add collectors for a survey.
// POST http://localhost:3000/surveys/{SURVEY ID}/collectors
// POST http://localhost:3000/surveys/1/collectors
app.post('/surveys/:sid/collectors', function(req, response) {
var colls = req.body.collectors;
var total = colls.length;
console.log('Adding ' + total + ' collectors to the database.');
var count = 0;
getCollection(function(err, collection) {
var surveyid = req.params.sid;
// Iterate over each survey response we received.
colls.forEach(function(coll) {
var id = idgen();
coll.id = id;
coll.survey = surveyid;
// Add collectors to database.
collection.insert(coll, function() {
// Check if we've added all of them.
if (++count == total) {
response.send({collectors: colls}, 201);
}
});
});
});
});
// Update a collector
// PUT http://localhost:3000/surveys/{SURVEY ID}/collectors/{COLLECTOR ID}
// PUT http://localhost:3000/surveys/1/collectors/2ec140e0-827f-11e1-83d8-bf682a6ee038
app.put('/surveys/:sid/collectors/:cid', function(req, response) {
var coll = req.body.collector;
console.log('Updating a collector');
getCollection(function(err, collection) {
var surveyid = req.params.sid;
var cid = req.params.cid;
collection.findAndModify({'survey': surveyid, 'id': cid}, {_id: 1}, {$set: {forms: coll.forms}},
{new: true}, function(err, object) {
if (handleError(err, response)) return;
response.send({collector: object});
});
});
});
}