-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathendPoints.js
More file actions
89 lines (77 loc) · 2.63 KB
/
endPoints.js
File metadata and controls
89 lines (77 loc) · 2.63 KB
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
"use strict";
module.exports = {
load : require,
data : function(config, task, req, res) {
let generator = this.load(`${config.taskRoot}/${task}/data`);
let data = {};
if(typeof generator == 'function') {
data = generator(req, res);
}
req.session.data || (req.session.data = {});
req.session.data[task] = data;
res.send(this.jsWrapper(data));
},
check : function(config, req, res) {
if(!req.body.answer) {
return res.json({
error: "no answer defined"
});
}
req.session.data || (req.session.data = {});
let task = req.body.task || config.tasks[0];
let answer = req.body.answer;
let nextIndex = config.tasks.indexOf(task) + 1;
let taskManager = this.load(`${config.taskRoot}/${task}/back`);
// check if data is present
if(taskManager.dataRequired && typeof req.session.data[task] === 'undefined') {
return res.json({
error: "Lost session? Can't access data."
});
}
let response = taskManager.check(req.body.answer, req.session.data[task], req, res);
if(response === true) {
config.onSuccess && config.onSuccess(task, answer, req, res);
return res.json({
next: config.tasks[nextIndex],
keyWord : taskManager.keyWord
});
} else {
config.onFailure && config.onFailure(task, answer, req, res);
return res.json({
error: response
});
}
},
jumpTo : function(config, req, res) {
let keyword = req.query.keyword;
let found, nextTask;
if(!keyword) {
return res.json({
error: 'missing keyword!'
});
}
for(let task of config.tasks) {
let taskManager = this.load(`${config.taskRoot}/${task}/back`);
if(found) {
nextTask = task;
break;
} else if(taskManager.keyWord.toLowerCase() == keyword.toLowerCase()) {
found = true;
}
}
if(nextTask) {
config.onJumpTo && config.onJumpTo(nextTask, req, res);
return res.json({
next: nextTask
});
}
config.onWrongKeword && config.onWrongKeword(task, keyword, req, res);
return res.json({
error: 'unknown keyword!'
});
},
jsWrapper : function(data) {
let json = JSON.stringify(data);
return `devDefine([], function() {return ${json}})`;
}
};