diff options
author | tomsmeding <tom.smeding@gmail.com> | 2016-10-25 11:28:04 +0200 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2016-10-25 11:28:04 +0200 |
commit | 9bc35041d52041b9dcd34fb590070d3cc78108fd (patch) | |
tree | 5a3266b67555fde6647743525435b190fe01b03d /modules/todo/todo.js | |
parent | cf8ad726b11fb6d76bcef22196c4b6b3f32e6d1f (diff) |
Add TODO module
Diffstat (limited to 'modules/todo/todo.js')
-rw-r--r-- | modules/todo/todo.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/modules/todo/todo.js b/modules/todo/todo.js new file mode 100644 index 0000000..3a86e68 --- /dev/null +++ b/modules/todo/todo.js @@ -0,0 +1,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(); + }); +}; |