summaryrefslogtreecommitdiff
path: root/modules/todo/todo.js
blob: ad954f9e03da53e788464e2bd5d44a7a8179f299 (plain)
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/task",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();
	});
};