/
UsersController.js
125 lines (104 loc) · 3.1 KB
/
UsersController.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const { Router } = require('express');
const { inject } = require('awilix-express');
const Status = require('http-status');
const UsersController = {
get router() {
const router = Router();
router.use(inject('userSerializer'));
router.get('/', inject('getAllUsers'), this.index);
router.get('/:id', inject('getUser'), this.show);
router.post('/', inject('createUser'), this.create);
router.put('/:id', inject('updateUser'), this.update);
router.delete('/:id', inject('deleteUser'), this.delete);
return router;
},
index(req, res, next) {
const { getAllUsers, userSerializer } = req;
const { SUCCESS, ERROR } = getAllUsers.outputs;
getAllUsers
.on(SUCCESS, (users) => {
res
.status(Status.OK)
.json(users.map(userSerializer.serialize));
})
.on(ERROR, next);
getAllUsers.execute();
},
show(req, res, next) {
const { getUser, userSerializer } = req;
const { SUCCESS, ERROR, NOT_FOUND } = getUser.outputs;
getUser
.on(SUCCESS, (user) => {
res
.status(Status.OK)
.json(userSerializer.serialize(user));
})
.on(NOT_FOUND, (error) => {
res.status(Status.NOT_FOUND).json({
type: 'NotFoundError',
details: error.details
});
})
.on(ERROR, next);
getUser.execute(Number(req.params.id));
},
create(req, res, next) {
const { createUser, userSerializer } = req;
const { SUCCESS, ERROR, VALIDATION_ERROR } = createUser.outputs;
createUser
.on(SUCCESS, (user) => {
res
.status(Status.CREATED)
.json(userSerializer.serialize(user));
})
.on(VALIDATION_ERROR, (error) => {
res.status(Status.BAD_REQUEST).json({
type: 'ValidationError',
details: error.details
});
})
.on(ERROR, next);
createUser.execute(req.body);
},
update(req, res, next) {
const { updateUser, userSerializer } = req;
const { SUCCESS, ERROR, VALIDATION_ERROR, NOT_FOUND } = updateUser.outputs;
updateUser
.on(SUCCESS, (user) => {
res
.status(Status.ACCEPTED)
.json(userSerializer.serialize(user));
})
.on(VALIDATION_ERROR, (error) => {
res.status(Status.BAD_REQUEST).json({
type: 'ValidationError',
details: error.details
});
})
.on(NOT_FOUND, (error) => {
res.status(Status.NOT_FOUND).json({
type: 'NotFoundError',
details: error.details
});
})
.on(ERROR, next);
updateUser.execute(Number(req.params.id), req.body);
},
delete(req, res, next) {
const { deleteUser } = req;
const { SUCCESS, ERROR, NOT_FOUND } = deleteUser.outputs;
deleteUser
.on(SUCCESS, () => {
res.status(Status.ACCEPTED).end();
})
.on(NOT_FOUND, (error) => {
res.status(Status.NOT_FOUND).json({
type: 'NotFoundError',
details: error.details
});
})
.on(ERROR, next);
deleteUser.execute(Number(req.params.id));
}
};
module.exports = UsersController;