1
+ const Customer = require ( '../models/customer.model.js' ) ;
2
+
3
+ // POST a Customer
4
+ exports . create = ( req , res ) => {
5
+
6
+ const customer = new Customer ( {
7
+ firstname : req . body . firstname ,
8
+ lastname : req . body . lastname ,
9
+ age : req . body . age ,
10
+ address : req . body . address ,
11
+ } ) ;
12
+
13
+ // Save a Customer in the MongoDB
14
+ customer . save ( ) . then ( data => {
15
+ // send uploading message to client
16
+ res . status ( 200 ) . json ( {
17
+ message : "Upload Successfully a Customer to MongoDB with id = " + data . id ,
18
+ customer : data ,
19
+ } ) ;
20
+ } ) . catch ( err => {
21
+ res . status ( 500 ) . json ( {
22
+ message : "Fail!" ,
23
+ error : err . message
24
+ } ) ;
25
+ } ) ;
26
+ } ;
27
+
28
+ // FETCH all Customers
29
+ exports . findall = ( req , res ) => {
30
+ Customer . find ( ) . select ( '-__v' ) . then ( customerInfos => {
31
+ res . status ( 200 ) . json ( {
32
+ message : "Get all Customers' Infos Successfully!" ,
33
+ numberOfCustomers : customerInfos . length ,
34
+ customers : customerInfos
35
+ } ) ;
36
+ } ) . catch ( error => {
37
+ // log on console
38
+ console . log ( error ) ;
39
+
40
+ res . status ( 500 ) . json ( {
41
+ message : "Error!" ,
42
+ error : error
43
+ } ) ;
44
+ } ) ;
45
+ } ;
46
+
47
+ // find a Customer by id
48
+ exports . findone = ( req , res ) => {
49
+ Customer . findById ( req . params . id ) . select ( '-__v' )
50
+ . then ( customer => {
51
+ res . status ( 200 ) . json ( {
52
+ message : " Successfully Get a Customer from MongoDB with id = " + req . params . id ,
53
+ customer : customer
54
+ } ) ;
55
+ } ) . catch ( err => {
56
+ if ( err . kind === 'ObjectId' ) {
57
+ return res . status ( 404 ) . send ( {
58
+ message : "Customer not found with id " + req . params . id ,
59
+ error : err
60
+ } ) ;
61
+ }
62
+ return res . status ( 500 ) . send ( {
63
+ message : "Error retrieving Customer with id " + req . params . id ,
64
+ error : err
65
+ } ) ;
66
+ } ) ;
67
+ } ;
68
+
69
+ // UPDATE a Customer
70
+ exports . update = ( req , res ) => {
71
+ // Find customer and update it
72
+ Customer . findByIdAndUpdate (
73
+ req . params . id ,
74
+ {
75
+ firstname : req . body . firstname ,
76
+ lastname : req . body . lastname ,
77
+ age : req . body . age
78
+ } ,
79
+ { new : true }
80
+ ) . select ( '-__v' )
81
+ . then ( customer => {
82
+ if ( ! customer ) {
83
+ return res . status ( 404 ) . send ( {
84
+ message : "Error -> Can NOT update a customer with id = " + req . params . id ,
85
+ error : "Not Found!"
86
+ } ) ;
87
+ }
88
+
89
+ res . status ( 200 ) . json ( {
90
+ message : "Update successfully a Customer with id = " + req . params . id ,
91
+ customer : customer ,
92
+ } ) ;
93
+ } ) . catch ( err => {
94
+ return res . status ( 500 ) . send ( {
95
+ message : "Error -> Can not update a customer with id = " + req . params . id ,
96
+ error : err . message
97
+ } ) ;
98
+ } ) ;
99
+ } ;
100
+
101
+ // DELETE a Customer
102
+ exports . delete = ( req , res ) => {
103
+ let customerId = req . params . id
104
+
105
+ Customer . findByIdAndRemove ( customerId ) . select ( '-__v -_id' )
106
+ . then ( customer => {
107
+ if ( ! customer ) {
108
+ res . status ( 404 ) . json ( {
109
+ message : "Does Not exist a Customer with id = " + customerId ,
110
+ error : "404" ,
111
+ } ) ;
112
+ }
113
+ res . status ( 200 ) . json ( {
114
+ message : "Delete Successfully a Customer with id = " + customerId ,
115
+ customer : customer ,
116
+ } ) ;
117
+ } ) . catch ( err => {
118
+ return res . status ( 500 ) . send ( {
119
+ message : "Error -> Can NOT delete a customer with id = " + customerId ,
120
+ error : err . message
121
+ } ) ;
122
+ } ) ;
123
+ } ;
124
+
125
+ exports . filteringByAge = ( req , res ) => {
126
+ const age = parseInt ( req . query . age ) ;
127
+
128
+ Customer . find ( { age :age } ) . select ( "-__v" )
129
+ . then ( results => {
130
+ res . status ( 200 ) . json ( {
131
+ "message" : "Get all Customers with age = " + age ,
132
+ "size" : results . length ,
133
+ "customers" : results
134
+ } ) ;
135
+ } ) . catch ( err => {
136
+ console . log ( err ) ;
137
+ res . status ( 500 ) . json ( {
138
+ message : "Error!" ,
139
+ error : err
140
+ } ) ;
141
+ } ) ;
142
+ }
143
+
144
+ exports . pagination = async ( req , res ) => {
145
+
146
+ try {
147
+
148
+ const page = parseInt ( req . query . page ) ;
149
+ const limit = parseInt ( req . query . limit ) ; // Make sure to parse the limit to number
150
+
151
+ const offset = page ? page * limit : 0 ;
152
+
153
+ // We are using the '3 layer' architecture explored on the 'bulletproof node.js architecture'
154
+ // Basically, it's just a class where we have our business logic
155
+
156
+ let results = await Customer . find ( { } ) // You may want to add a query
157
+ . skip ( offset ) // Always apply 'skip' before 'limit'
158
+ . limit ( limit )
159
+ . select ( "-__v" ) ; // This is your 'page size'
160
+
161
+ let numOfCustomer = await Customer . countDocuments ( { } ) ;
162
+
163
+ res . status ( 200 ) . json ( {
164
+ "message" : "Paginating is completed! Query parameters: page = " + page + ", limit = " + limit ,
165
+ "totalPages" : Math . ceil ( numOfCustomer / limit ) ,
166
+ "totalItems" : numOfCustomer ,
167
+ "limit" : limit ,
168
+ "currentPageSize" : results . length ,
169
+ "customers" : results
170
+ } ) ;
171
+ } catch ( error ) {
172
+ res . status ( 500 ) . send ( {
173
+ message : "Error -> Can NOT complete a paging request!" ,
174
+ error : error . message ,
175
+ } ) ;
176
+ }
177
+
178
+ }
179
+
180
+ exports . paginationfilterandsort = async ( req , res ) => {
181
+ try {
182
+ const page = parseInt ( req . query . page ) ;
183
+ const limit = parseInt ( req . query . limit ) ; // Make sure to parse the limit to number
184
+ const age = parseInt ( req . query . age ) ;
185
+
186
+ const offset = page ? page * limit : 0 ;
187
+
188
+ let results = await Customer . find ( { age : age } ) // You may want to add a query
189
+ . skip ( offset ) // Always apply 'skip' before 'limit'
190
+ . limit ( limit )
191
+ . sort ( { "firstname" : 1 , "lastname" : - 1 } )
192
+ . select ( "-__v" ) ; // This is your 'page size'
193
+
194
+ let numOfCustomer = await Customer . countDocuments ( { age : age } ) ;
195
+
196
+ res . status ( 200 ) . json ( {
197
+ "message" : "Paginating is completed! Query parameters: page = " + page + ", limit = " + limit ,
198
+ "totalPages" : Math . ceil ( numOfCustomer / limit ) ,
199
+ "totalItems" : numOfCustomer ,
200
+ "limit" : limit ,
201
+ "age-filtering" : age ,
202
+ "currentPageSize" : results . length ,
203
+ "customers" : results
204
+ } ) ;
205
+ } catch ( error ) {
206
+ res . status ( 500 ) . send ( {
207
+ message : "Error -> Can NOT complete a paging + filtering + sorting request!" ,
208
+ error : error . message ,
209
+ } ) ;
210
+ }
211
+ } ;
0 commit comments