216 lines
5.5 KiB
JavaScript
Executable File
216 lines
5.5 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 mongoose = require('mongoose');
|
|
const Subscription = mongoose.model('subscribers');
|
|
|
|
var { Todo } = require('../models/todo');
|
|
|
|
const _ = require('lodash');
|
|
|
|
const { ObjectID } = require('mongodb');
|
|
|
|
|
|
router.post('/', authenticate, (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)
|
|
}
|
|
|
|
todo.save().then((writeresult) => {
|
|
let idobj = writeresult._id;
|
|
Todo.findById(idobj)
|
|
.then(record => {
|
|
// tools.mylog('REC SAVED :', record.descr);
|
|
|
|
tools.sendNotificationToUser(todo.userId, 'Todo: ' + record.descr, record.descr, '/todo/' + todo.category, '', 'todo', [])
|
|
.then(ris => {
|
|
if (ris) {
|
|
res.send({ record });
|
|
} else {
|
|
// already sent the error on calling sendNotificationToUser
|
|
}
|
|
})
|
|
})
|
|
}).catch((e) => {
|
|
console.log('ERRORE in TODO POST', e.message);
|
|
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.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)) {
|
|
// 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('/: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);
|
|
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(),
|
|
id_prev: null,
|
|
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);
|
|
res.status(400).send(e);
|
|
});
|
|
|
|
});
|
|
|
|
router.delete('/:id', authenticate, (req, res) => {
|
|
var id = req.params.id;
|
|
|
|
if (!ObjectID.isValid(id)) {
|
|
return res.status(404).send();
|
|
}
|
|
|
|
Todo.findByIdAndRemove(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;
|