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
|
"use strict";
// {"key":"tasks","value":[{"id":1,"subject":"kaas rep","repweeks":0,"date":"2016-10-25T07:46:54.493Z"},{"id":2,"subject":"kaas","repweeks":0,"date":"2016-10-27T07:46:54.493Z"}]}
var cmn=require("../$common.js"),
persist=require("node-persist");
var moddir=null;
persist=persist.create({
dir:"persist/todo",
continuous:false,
interval:false
});
persist.initSync();
//tasks: [{id: Int,subject: String,repweeks: Int,date: Date}]
//repweeks==0 implies no repetition
var nextid=persist.getItemSync("nextid");
if(nextid==null)nextid=1;
var tasks=persist.getItemSync("tasks");
(function(){
if(!tasks){
tasks=[];
persist.setItemSync("tasks",tasks);
} else {
for(var task of tasks){
task.date=new Date(task.date);
if(nextid<=task.id)nextid=task.id+1;
}
persist.setItemSync("nextid",nextid);
}
})();
module.exports=function(app,io,_moddir){
moddir=_moddir;
app.all(["/todo","/todo/*"],cmn.authgen());
app.get("/todo",function(req,res){
res.sendFile(moddir+"/todo.html");
});
app.get("/todo/list",function(req,res){
res.json(tasks);
});
app.delete("/todo/task",function(req,res){
var id=+req.body;
var i;
var fail=false;
if(id<0||~~id!=id||isNaN(id)){
fail=true;
} else {
for(i=0;i<tasks.length;i++)if(tasks[i].id==id)break;
if(i==tasks.length)fail=true;
else {
tasks.splice(i,1);
persist.setItemSync("tasks",tasks);
}
}
if(fail)res.status(404).send("Unknown id");
else res.status(200).end();
});
app.post("/todo/task",function(req,res){
var obj;
try {
obj=JSON.parse(req.body);
} catch(e){
res.status(400).send("Invalid request");
return;
}
var subject=obj.subject+"",repweeks=+obj.repweeks,date=new Date(obj.date);
if(subject.length==0||
isNaN(repweeks)||repweeks<0||repweeks!=~~repweeks||
isNaN(date.getTime())){
res.status(400).send("Invalid data");
}
tasks.push({
id:nextid++,
subject:subject,
repweeks:repweeks,
date:date
});
persist.setItemSync("tasks",tasks);
persist.setItemSync("nextid",nextid);
res.status(200).end();
});
};
|