summaryrefslogtreecommitdiff
path: root/modules/todo/todo.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/todo/todo.js')
-rw-r--r--modules/todo/todo.js86
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();
+ });
+};