mirror of https://github.com/IoTcat/todo-ddl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
6.8 KiB
244 lines
6.8 KiB
4 years ago
|
module.exports = () => {
|
||
|
var o = {
|
||
|
__: {
|
||
|
id: (aid, zone) => {
|
||
|
const ids = find.search(aid, 'id', zone);
|
||
|
if(zone.length > 1){
|
||
|
return find.byIDs(ids, data.td());
|
||
|
}
|
||
|
return find.byIDs(ids, zone[0]);
|
||
|
},
|
||
|
name: (aname, zone) => {
|
||
|
const names = find.search(aname, 'name', zone);
|
||
|
return find.byIDs(names);
|
||
|
},
|
||
|
getLogs: id => data.td().filter(item => item.id == id)[0].logs.filter(item2 => !item2.isDel),
|
||
|
getAllLogs: id => data.td().filter(item => item.id == id)[0].logs,
|
||
|
resetLog: id => {
|
||
|
if(id == data.log()) {
|
||
|
data.log('null');
|
||
|
}
|
||
|
},
|
||
|
addLog: (id, content) => {
|
||
|
let logs = o.__.getAllLogs(id);
|
||
|
logs.push({
|
||
|
'id': o.__.generateID(16),
|
||
|
'content': content,
|
||
|
createTime: (new Date()).valueOf(),
|
||
|
lastOperateTime: (new Date()).valueOf(),
|
||
|
isDel: false
|
||
|
});
|
||
|
find.updateTd(id, 'logs', logs);
|
||
|
},
|
||
|
rmLog: (id, lid) => {
|
||
|
let logs = o.__.getAllLogs(id);
|
||
|
for(let i of logs){
|
||
|
if(i.id == lid){
|
||
|
i.isDel = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
find.updateTd(id, 'logs', logs);
|
||
|
},
|
||
|
getAllClass: (zone) => {
|
||
|
let arr = [];
|
||
|
for(const cla of zone){
|
||
|
for(const i of cla){
|
||
|
if(arr.indexOf(i.class) != -1){
|
||
|
arr.push(i.class);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return arr;
|
||
|
},
|
||
|
parseTime: t => {
|
||
|
if(!t){
|
||
|
return 'null';
|
||
|
}
|
||
|
const st = new Date(t);
|
||
|
return `${st.getFullYear()}-${st.getMonth()+1}-${st.getDate()} ${st.getHours()}:${st.getMinutes()}:${st.getSeconds()}`;
|
||
|
},
|
||
|
generateID: (l) => md5((new Date()).valueOf()).substring(0, l),
|
||
|
show: arr => {
|
||
|
let configInfo = new table({
|
||
|
head: ['id', 'class', 'name', 'createTime', 'todoTime', 'endTime']
|
||
|
});
|
||
|
for(const i of arr){
|
||
|
configInfo.push([i.id, i.class, i.name, o.__.parseTime(i.createTime), o.__.parseTime(i.todoTime), o.__.parseTime(i.endTime)]);
|
||
|
}
|
||
|
console.log(configInfo.toString());
|
||
|
},
|
||
|
showLogs: arr => {
|
||
|
let configInfo = new table({
|
||
|
head: ['id', 'content', 'createTime']
|
||
|
});
|
||
|
for(const i of arr){
|
||
|
configInfo.push([i.id, i.content, o.__.parseTime(i.createTime)]);
|
||
|
}
|
||
|
console.log(configInfo.toString());
|
||
|
}
|
||
|
},
|
||
|
getAll: () => data.td(),
|
||
|
getAllClass: () => o.__.getAllClass([data.td()]),
|
||
|
getByaID: id => o.__.id(id, [data.td()]),
|
||
|
getByaName: name => o.__.name(name, [data.td()]),
|
||
|
new: (name, cla) => {
|
||
|
let d = data.td();
|
||
|
if(!cla){
|
||
|
cla = 'default';
|
||
|
}
|
||
|
if(!name){
|
||
|
return 'Name should not be empty!!';
|
||
|
}
|
||
|
if(name.length > 25){
|
||
|
return 'Name too Long!!';
|
||
|
}
|
||
|
d.push({
|
||
|
id: o.__.generateID(8),
|
||
|
'name': name,
|
||
|
'class': cla,
|
||
|
createTime: (new Date()).valueOf(),
|
||
|
todoTime: null,
|
||
|
endTime: null,
|
||
|
lastOperateTime: (new Date()).valueOf(),
|
||
|
idDel: false,
|
||
|
logs: [{
|
||
|
id: o.__.generateID(16),
|
||
|
content: 'Todo Item Created!!',
|
||
|
createTime: (new Date()).valueOf(),
|
||
|
lastOperateTime: (new Date()).valueOf()
|
||
|
}]
|
||
|
});
|
||
|
data.td(d);
|
||
|
return;
|
||
|
},
|
||
|
rm: aid => {
|
||
|
let items = o.__.id(aid, [o.todo.getAll(), o.task.getAll(), o.history.getAll()]);
|
||
|
if(items.length > 1){
|
||
|
return 'Which id do you want to remove?';
|
||
|
}
|
||
|
if(items.length <= 0){
|
||
|
return 'Not found!!';
|
||
|
}
|
||
|
find.updateTd(items[0].id, 'isDel', true);
|
||
|
console.log(items[0].id);
|
||
|
o.__.resetLog(items[0].id);
|
||
|
},
|
||
|
add: aid => {
|
||
|
let items = o.__.id(aid, [o.todo.getAll()]);
|
||
|
if(items.length > 1){
|
||
|
return 'Which id do you want to add to task?';
|
||
|
}
|
||
|
if(items.length <= 0){
|
||
|
return 'Not found!!';
|
||
|
}
|
||
|
find.updateTd(items[0].id, 'todoTime', (new Date()).valueOf());
|
||
|
},
|
||
|
return: aid => {
|
||
|
let items = o.__.id(aid, [o.task.getAll()]);
|
||
|
if(items.length > 1){
|
||
|
return 'Which id do you want to return?';
|
||
|
}
|
||
|
if(items.length <= 0){
|
||
|
return 'Not found!!';
|
||
|
}
|
||
|
find.updateTd(items[0].id, 'todoTime', null);
|
||
|
o.__.resetLog(items[0].id);
|
||
|
},
|
||
|
done: aid => {
|
||
|
let items = o.__.id(aid, [o.task.getAll()]);
|
||
|
if(items.length > 1){
|
||
|
return 'Which id do you want to finish?';
|
||
|
}
|
||
|
if(items.length <= 0){
|
||
|
return 'Not found!!';
|
||
|
}
|
||
|
find.updateTd(items[0].id, 'endTime', (new Date()).valueOf());
|
||
|
o.__.resetLog(items[0].id);
|
||
|
},
|
||
|
recover: aid => {
|
||
|
let items = o.__.id(aid, [o.history.getAll()]);
|
||
|
if(items.length > 1){
|
||
|
return 'Which id do you want to recover?';
|
||
|
}
|
||
|
if(items.length <= 0){
|
||
|
return 'Not found!!';
|
||
|
}
|
||
|
find.updateTd(items[0].id, 'endTime', null);
|
||
|
},
|
||
|
/* log */
|
||
|
ll: () => {
|
||
|
if(data.log() == 'null'){
|
||
|
return 'No Task Pointed!! Please select a task to begin!!';
|
||
|
}
|
||
|
let logs = o.__.getLogs(data.log());
|
||
|
console.log('At task ' + data.log() + ' ' + o.__.id(data.log(), [data.td()])[0].name);
|
||
|
o.__.showLogs(logs);
|
||
|
},
|
||
|
select: aid => {
|
||
|
let items = o.__.id(aid, [o.task.getAll()]);
|
||
|
if(items.length > 1){
|
||
|
return 'Which id do you want to add to task?';
|
||
|
}
|
||
|
if(items.length <= 0){
|
||
|
return 'Not found!!';
|
||
|
}
|
||
|
data.log(items[0].id);
|
||
|
console.log(items[0].id);
|
||
|
},
|
||
|
log: content => {
|
||
|
if(data.log() == "null"){
|
||
|
return 'No Task Pointed!! Please select a task to begin!!';
|
||
|
}
|
||
|
o.__.addLog(data.log(), content);
|
||
|
},
|
||
|
rml: aid => {
|
||
|
if(data.log() == "null"){
|
||
|
return 'No Task Pointed!! Please select a task to begin!!';
|
||
|
}
|
||
|
let items = o.__.id(aid, [o.__.id(data.log(), [data.td()])[0].logs]);
|
||
|
if(items.length > 1){
|
||
|
return 'Which id do you want to add to task?';
|
||
|
}
|
||
|
if(items.length <= 0){
|
||
|
return 'Not found!!';
|
||
|
}
|
||
|
o.__.rmLog(data.log(), items[0].id);
|
||
|
console.log(items[0].id);
|
||
|
},
|
||
|
/* sub */
|
||
|
todo: {
|
||
|
getAll: () => data.td().filter(item => !item.isDel && item.todoTime == null),
|
||
|
getByaID: id => o.__.id(id, [o.todo.getAll()]),
|
||
|
getByaName: name => o.__.name(name, [o.todo.getAll()]),
|
||
|
getAllClass: () => o.__.getAllClass([o.todo.getAll()]),
|
||
|
},
|
||
|
task: {
|
||
|
getAll: () => data.td().filter(item => !item.isDel && item.todoTime != null && item.endTime == null),
|
||
|
getByaID: id => o.__.id(id, [o.task.getAll()]),
|
||
|
getByaName: name => o.__.name(name, [o.task.getAll()]),
|
||
|
getAllClass: () => o.__.getAllClass([o.task.getAll()]),
|
||
|
},
|
||
|
history: {
|
||
|
getAll: () => data.td().filter(item => !item.isDel && item.todoTime != null && item.endTime != null),
|
||
|
getByaID: id => o.__.id(id, [o.history.getAll()]),
|
||
|
getByaName: name => o.__.name(name, [o.history.getAll()]),
|
||
|
getAllClass: () => o.__.getAllClass([o.history.getAll()]),
|
||
|
},
|
||
|
ash: {
|
||
|
getAll: () => data.td().filter(item => item.isDel),
|
||
|
getByaID: id => o.__.id(id, [o.ash.getAll()]),
|
||
|
getByaName: name => o.__.name(name, [o.ash.getAll()]),
|
||
|
getAllClass: () => o.__.getAllClass([o.ash.getAll()]),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var data = require(__dirname + '/../utilities/data.js')();
|
||
|
const find = require(__dirname + '/../utilities/find.js')();
|
||
|
const colors = require('colors');
|
||
|
const boxen = require('boxen');
|
||
|
const table = require('cli-table');
|
||
|
const md5 = require('md5');
|
||
|
|
||
|
return o;
|
||
|
}
|