274 lines
6.9 KiB
JavaScript
Executable File
274 lines
6.9 KiB
JavaScript
Executable File
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
const tools = require('../tools/general');
|
|
|
|
var server_constants = require('../tools/server_constants');
|
|
|
|
var { Project } = require('../models/project');
|
|
|
|
var { authenticate } = require('../middleware/authenticate');
|
|
|
|
|
|
var { Todo } = require('../models/todo');
|
|
|
|
const Hours = require('../models/hours');
|
|
|
|
const _ = require('lodash');
|
|
|
|
const { ObjectId } = require('mongodb');
|
|
|
|
|
|
router.post('/', authenticate, async (req, res) => {
|
|
|
|
var body = _.pick(req.body, tools.allfieldTodoWithId());
|
|
// tools.mylogshow('INPUT', body);
|
|
var todo = new Todo(body);
|
|
|
|
// todo.expiring_at = new Date(todo.expiring_at);
|
|
|
|
// tools.mylog('ID :', todo._id, todo.descr, todo.userId, req.user._id);
|
|
|
|
if (!('descr' in req.body)) {
|
|
return res.status(400).send({ code: server_constants.RIS_CODE_LOGIN_ERR_GENERIC });
|
|
}
|
|
|
|
if (String(todo.userId) !== String(req.user._id)) {
|
|
// I'm trying to write something not mine!
|
|
tools.mylog('todo.userId = ', todo.userId, 'req.user._id', req.user._id)
|
|
return res.status(404).send({ code: server_constants.RIS_CODE_TODO_CREATING_NOTMYUSER });
|
|
}
|
|
|
|
// tools.mylog('TODO POST :', todo.descr, todo._id);
|
|
|
|
todo.modified = false;
|
|
if (!todo.descr) {
|
|
console.log('RECORD NON VALIDO !?', req.body)
|
|
}
|
|
|
|
let prevrec = null;
|
|
if (!!todo && todo._id)
|
|
prevrec = await Todo.findById(todo._id);
|
|
|
|
return todo.save()
|
|
.then((writeresult) => {
|
|
let idobj = writeresult._id;
|
|
return Todo.findById(idobj)
|
|
.then(async (record) => {
|
|
// tools.mylog('REC SAVED :', record.descr);
|
|
|
|
let aggiorna = false;
|
|
let titolo = '';
|
|
|
|
if (prevrec) {
|
|
if (todo.completed_at !== prevrec.completed_at) {
|
|
aggiorna = true;
|
|
titolo = 'Attività Completata!'
|
|
}
|
|
} else {
|
|
aggiorna = true;
|
|
}
|
|
|
|
if (aggiorna) {
|
|
await tools.sendNotificationToUser(todo.userId, titolo + ' ' + record.descr, record.descr, '/todo/' + todo.category, '', 'todo', [])
|
|
.then(ris => {
|
|
if (ris) {
|
|
return res.send({ record });
|
|
} else {
|
|
// already sent the error on calling sendNotificationToUser
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}).catch((e) => {
|
|
console.log('ERRORE in TODO POST', e.message);
|
|
return res.status(400).send(e);
|
|
});
|
|
});
|
|
|
|
|
|
router.patch('/:id', authenticate, (req, res) => {
|
|
var id = req.params.id;
|
|
var body = _.pick(req.body, tools.allfieldTodo());
|
|
|
|
// tools.mylogshow('PATCH TODO: ', id);
|
|
|
|
if (!ObjectId.isValid(id)) {
|
|
tools.mylog('ERROR: id not VALID', id);
|
|
return res.status(404).send();
|
|
}
|
|
|
|
Todo.findById(id)
|
|
.then((todorec) => {
|
|
|
|
if (todorec) {
|
|
// Esiste, pertanto gli tolgo l'UserId generato in precedenza
|
|
delete body["userId"];
|
|
}
|
|
|
|
Todo.findByIdAndUpdate(id, { $set: body }, { new: true })
|
|
.then((todo) => {
|
|
if (!todo) {
|
|
tools.mylogshow(' TODO NOT FOUND !: id:', id, 'body: ', body);
|
|
return res.status(404).send();
|
|
}
|
|
|
|
let level = 0;
|
|
return Todo.calculateTreeTodo(todo.phase, todo.userId, todo.category, true, todo.category, false)
|
|
.then(objdatacalc => {
|
|
// tools.mylogshow(' TODO TO MODIFY: ', todo.descr, todo.expiring_at);
|
|
|
|
if (todo.userId !== String(req.user._id) && todo.privacywrite === server_constants.Privacy.onlyme) {
|
|
// I'm trying to write something not mine!
|
|
return res.status(404).send({ code: server_constants.RIS_CODE_TODO_CREATING_NOTMYUSER });
|
|
}
|
|
|
|
todo.modified = false;
|
|
|
|
// tools.mylog('PATCH ', todo.descr, todo._id);
|
|
|
|
res.send({ todo, objdatacalc });
|
|
});
|
|
|
|
}).catch((e) => {
|
|
tools.mylogserr('Error patch TODO: ', e);
|
|
res.status(400).send();
|
|
})
|
|
})
|
|
});
|
|
|
|
|
|
router.get('/calc/:id', authenticate, (req, res) => {
|
|
var id = req.params.id;
|
|
|
|
let rec = {};
|
|
|
|
Hours.calculateHoursTodo(id).then((hoursworked) => {
|
|
rec.hoursworked = hoursworked;
|
|
return res.send({ rec });
|
|
}).catch((err) => {
|
|
res.status(400).send();
|
|
});
|
|
|
|
return rec;
|
|
|
|
});
|
|
|
|
router.get('/:userId', authenticate, (req, res) => {
|
|
var userId = req.params.userId;
|
|
// var category = req.params.category;
|
|
|
|
// tools.mylog('GET TODOS : ', req.params);
|
|
|
|
if (!ObjectId.isValid(userId)) {
|
|
return res.status(404).send();
|
|
}
|
|
|
|
if (userId !== String(req.user._id)) {
|
|
// I'm trying to write something not mine!
|
|
return res.status(404).send({ code: server_constants.RIS_CODE_TODO_CREATING_NOTMYUSER });
|
|
}
|
|
|
|
// Extract all the todos of the userId only
|
|
Todo.getAllTodo(userId).then((objtodos) => {
|
|
if (!!objtodos.arrtodos) {
|
|
// tools.mylog('todos', objtodos.arrtodos.length);
|
|
// tools.mylog('categories', objtodos.arrcategories.length);
|
|
}
|
|
|
|
res.send({ todos: objtodos.arrtodos, categories: objtodos.arrcategories });
|
|
}).catch((e) => {
|
|
console.log(e.message);
|
|
res.status(400).send(e);
|
|
});
|
|
|
|
});
|
|
|
|
router.get('/test', (req, res) => {
|
|
|
|
const todo = {
|
|
_id: new ObjectId(),
|
|
// category: "personal",
|
|
statustodo: 0,
|
|
completed_at: new Date(),
|
|
created_at: new Date(),
|
|
descr: "Primo Task Esempio",
|
|
enableExpiring: false,
|
|
expiring_at: new Date(),
|
|
modified: false,
|
|
modify_at: new Date(),
|
|
pos: 1,
|
|
priority: 1,
|
|
progress: 0,
|
|
userId: users[0]._id
|
|
};
|
|
|
|
const TodoOne = new Todo(todo).save().then((err, ris) => {
|
|
console.log('Err:', err);
|
|
console.log('Ris:', ris);
|
|
|
|
});
|
|
|
|
res.send({});
|
|
|
|
});
|
|
|
|
router.get('/', (req, res) => {
|
|
// var category = req.params.category;
|
|
|
|
// tools.mylog('GET ALL TODOS ');
|
|
|
|
// Extract all the todos of the userId only
|
|
Todo.getAllTodo('').then((objtodos) => {
|
|
if (!!objtodos.arrtodos) {
|
|
// tools.mylog('todos', objtodos.arrtodos.length);
|
|
// tools.mylog('categories', objtodos.arrcategories.length);
|
|
}
|
|
|
|
res.send({ todos: objtodos.arrtodos, categories: objtodos.arrcategories });
|
|
}).catch((e) => {
|
|
console.log(e.message);
|
|
res.status(400).send(e);
|
|
});
|
|
|
|
});
|
|
|
|
router.delete('/:id', authenticate, (req, res) => {
|
|
var id = req.params.id;
|
|
// var hide = req.params.hide;
|
|
|
|
let hide = true;
|
|
|
|
if (!ObjectId.isValid(id)) {
|
|
return res.status(404).send();
|
|
}
|
|
|
|
if (hide) {
|
|
Todo.findByIdAndUpdate(id, { $set: { deleted: true } }).then((todo) => {
|
|
if (!todo) {
|
|
return res.status(404).send();
|
|
}
|
|
res.send({ todo });
|
|
}).catch((e) => {
|
|
res.status(400).send();
|
|
});
|
|
|
|
} else {
|
|
Todo.deleteOne({_id: id}).then((todo) => {
|
|
if (!todo) {
|
|
return res.status(404).send();
|
|
}
|
|
|
|
// tools.mylog('DELETED ', todo.descr, todo._id);
|
|
|
|
res.send({ todo });
|
|
}).catch((e) => {
|
|
res.status(400).send();
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
|
|
module.exports = router;
|