| 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
126
127
128
129
130
131
132 | 1x
1x
1x
1x
2x
2x
1x
1x
2x
2x
2x
2x
2x
2x
2x
2x
2x
2x
3x
2x
1x
1x
1x
1x
2x
12x
1x
1x
2x
1x
1x
1x
1x
1x
2x
3x
2x
1x
1x
1x
1x
2x
1x
23x
1x
| const EndpointRouter = require('./EndpointRouter');
const { Errors } = require('../../constants');
const qs = require('qs');
const debug = require('../../log')('CRUDRouter');
/**
* CRUD Endpoint
* @extends EndpointRouter
*/
class CRUDEndpoint extends EndpointRouter {
constructor(dao) {
super();
if (new.target === CRUDEndpoint) {
throw new Error(Errors.GetByFieldFailed('CRUDEndpoint'));
}
this.setDAO(dao);
}
initEndpoints() {
super.initEndpoints();
this.initFilterEndpoint();
this.initGetAllEndpoint();
this.initGetByIdEndpoint();
this.initCreateEndpoint();
this.initUpdateEndpoint();
this.initDeleteEndpoint();
}
/**
* Init get all endpoint - GET '/'
*/
initGetAllEndpoint() {
this.router.get('/', (req, res) => this.getDAO()
.getAll({ user: req.user })
.then(users => res.status(200).send(users))
.catch(err => {
debug('[getAll]', err.message);
return this.sendErr(res, 400, err.message);
}));
}
/**
* Init get by id endpoint - GET '/:id'
*/
initGetByIdEndpoint() {
this.router.get('/:id', (req, res) =>
this.getDAO().getById(req.params.id, { user: req.user }).then(user => {
if (user) {
return res.status(200).send(user);
}
return this.sendErr(res, 404, 'Not found');
}).catch(err => {
debug('[getById]', err.message);
return this.sendErr(res, 400, err.message);
}));
}
/**
* Init create entity endpoint - POST '/'
*/
initCreateEndpoint() {
this.router.post('/', (req, res) =>
this.getDAO().create(req.body).then(user => res.status(200).send(user))
.catch(err => {
debug('[create]', err.message);
return this.sendErr(res, 400, err.message);
}));
}
/**
* Init update entity endpoint - PUT '/:id'
*/
initUpdateEndpoint() {
this.router.put('/:id', (req, res) => {
Eif (!req.body.id) {
try {
req.body.id = parseInt(req.params.id);
} catch (error) {
return this.sendErr(res, 400, error.message);
}
}
return this.getDAO().update(req.body, { user: req.user })
.then(user => res.status(200).send(user))
.catch(err => {
debug('[update]', err.message);
return this.sendErr(res, 400, err.message);
});
});
}
/**
* Init delete entity endpoint - DELETE '/:id'
*/
initDeleteEndpoint() {
this.router.delete('/:id', (req, res) =>
this.getDAO().remove(req.params.id, { user: req.user }).then(result => {
if (result === 0) {
return this.sendErr(res, 404, 'Not found');
}
return res.status(200).send({ success: true });
}).catch(err => {
debug('[delete]', err.message);
return this.sendErr(res, 400, err.message);
}));
}
/**
* Init filter endpoint - GET '/search?filter=xxx'
*/
initFilterEndpoint() {
this.router.get('/search', (req, res) => {
if (!req.query || !req.query.filter) return res.status(200).send([]);
// TODO parse filter
return this.getDAO().getByCriteria(req.query.filter, { user: req.user })
.then(result => res.status(200).send(result)).catch(err => {
debug('[search]', err.message);
return this.sendErr(res, 400, err.message);
});
});
}
setDAO(dao) {
this.DAO = dao;
}
getDAO() {
return this.DAO;
}
}
module.exports = CRUDEndpoint;
|