/
project.controller.js
94 lines (81 loc) · 2.23 KB
/
project.controller.js
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
87
88
89
90
91
92
93
94
const { Project } = require('../models/project.model');
const { ObjectId } = require('mongoose').Types;
const _ = require('lodash');
function createProject(req, res) {
let data = _.pick(req.body, ['title', 'description']);
data._creator = req.user._id;
const project = new Project(data);
project.save(project)
.then((response) => {
res.status(201).json(response);
})
.catch((error) => {
res.status(400).json(error);
});
}
async function getProjects(req, res) {
try {
const userId = req.user._id;
const query = { $or: [
{ _creator: userId },
{ members: { $eq: userId } },
] };
const projects = await Project.find(query);
res.status(200).json({ data: projects });
} catch (error) {
res.status(400).json(error);
}
}
function getProjectById(req, res) {
const projectId = req.params.id;
if (ObjectId.isValid(projectId)) {
Project.findOne({ _id: projectId, _creator: req.user._id })
.then((project) => {
const statusCode = project ? 200 : 404;
res.status(statusCode).json(project);
})
.catch((error) => {
res.status(400).json(error);
});
} else {
res.status(404).send();
}
}
function deleteProjectById(req, res) {
const projectId = req.params.id;
if (ObjectId.isValid(projectId)) {
Project.findOneAndRemove({ _id: projectId, _creator: req.user._id })
.then((project) => {
const statusCode = project ? 200 : 404;
res.status(statusCode).json(project);
})
.catch((error) => {
res.status(400).json(error);
});
} else {
res.status(404).send();
}
}
function updateProjectById(req, res) {
const projectId = req.params.id;
const data = _.pick(req.body, ['title', 'description']);
const query = { _id: projectId, _creator: req.user._id };
if (!ObjectId.isValid(projectId)) {
return res.status(404).send();
}
Project.findOneAndUpdate(query, { $set: data }, { new: true })
.then((project) => {
const statusCode = project ? 200 : 404;
res.status(statusCode).json(project);
})
.catch((error) => {
res.status(400).json(error);
});
}
module.exports = {
createProject,
getProjects,
getProjectById,
deleteProjectById,
updateProjectById,
};