Refactoring order route
							parent
							
								
									f6ab6207eb
								
							
						
					
					
						commit
						87a722d03e
					
				|  | @ -5,23 +5,21 @@ const { indexOrders } = require('../lib/indexing'); | |||
| const router = express.Router(); | ||||
| 
 | ||||
| // Show orders
 | ||||
| router.get('/admin/orders', restrict, (req, res, next) => { | ||||
| router.get('/admin/orders', restrict, async (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
| 
 | ||||
|     // Top 10 products
 | ||||
|     db.orders.find({}).sort({ orderDate: -1 }).limit(10).toArray((err, orders) => { | ||||
|         if(err){ | ||||
|             console.info(err.stack); | ||||
|         } | ||||
|     const orders = await db.orders.find({}).sort({ orderDate: -1 }).limit(10).toArray(); | ||||
| 
 | ||||
|     // If API request, return json
 | ||||
|     if(req.apiAuthenticated){ | ||||
|             return res.status(200).json({ | ||||
|         res.status(200).json({ | ||||
|             orders | ||||
|         }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|         return res.render('orders', { | ||||
|     res.render('orders', { | ||||
|         title: 'Cart', | ||||
|         orders: orders, | ||||
|         admin: true, | ||||
|  | @ -31,11 +29,10 @@ router.get('/admin/orders', restrict, (req, res, next) => { | |||
|         messageType: common.clearSessionValue(req.session, 'messageType'), | ||||
|         helpers: req.handlebars.helpers | ||||
|     }); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // Admin section
 | ||||
| router.get('/admin/orders/bystatus/:orderstatus', restrict, (req, res, next) => { | ||||
| router.get('/admin/orders/bystatus/:orderstatus', restrict, async (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
| 
 | ||||
|     if(typeof req.params.orderstatus === 'undefined'){ | ||||
|  | @ -45,19 +42,17 @@ router.get('/admin/orders/bystatus/:orderstatus', restrict, (req, res, next) => | |||
| 
 | ||||
|     // case insensitive search
 | ||||
|     const regex = new RegExp(['^', req.params.orderstatus, '$'].join(''), 'i'); | ||||
|     db.orders.find({ orderStatus: regex }).sort({ orderDate: -1 }).limit(10).toArray((err, orders) => { | ||||
|         if(err){ | ||||
|             console.info(err.stack); | ||||
|         } | ||||
|     const orders = await db.orders.find({ orderStatus: regex }).sort({ orderDate: -1 }).limit(10).toArray(); | ||||
| 
 | ||||
|     // If API request, return json
 | ||||
|     if(req.apiAuthenticated){ | ||||
|             return res.status(200).json({ | ||||
|         res.status(200).json({ | ||||
|             orders | ||||
|         }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|         return res.render('orders', { | ||||
|     res.render('orders', { | ||||
|         title: 'Cart', | ||||
|         orders: orders, | ||||
|         admin: true, | ||||
|  | @ -69,19 +64,16 @@ router.get('/admin/orders/bystatus/:orderstatus', restrict, (req, res, next) => | |||
|         messageType: common.clearSessionValue(req.session, 'messageType'), | ||||
|         helpers: req.handlebars.helpers | ||||
|     }); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // render the editor
 | ||||
| router.get('/admin/order/view/:id', restrict, (req, res) => { | ||||
| router.get('/admin/order/view/:id', restrict, async (req, res) => { | ||||
|     const db = req.app.db; | ||||
|     db.orders.findOne({ _id: common.getId(req.params.id) }, (err, result) => { | ||||
|         if(err){ | ||||
|             console.info(err.stack); | ||||
|         } | ||||
|     const order = await db.orders.findOne({ _id: common.getId(req.params.id) }); | ||||
| 
 | ||||
|     res.render('order', { | ||||
|         title: 'View order', | ||||
|             result: result, | ||||
|         result: order, | ||||
|         config: req.app.config, | ||||
|         session: req.session, | ||||
|         message: common.clearSessionValue(req.session, 'message'), | ||||
|  | @ -90,11 +82,10 @@ router.get('/admin/order/view/:id', restrict, (req, res) => { | |||
|         admin: true, | ||||
|         helpers: req.handlebars.helpers | ||||
|     }); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // Admin section
 | ||||
| router.get('/admin/orders/filter/:search', restrict, (req, res, next) => { | ||||
| router.get('/admin/orders/filter/:search', restrict, async (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
|     const searchTerm = req.params.search; | ||||
|     const ordersIndex = req.app.ordersIndex; | ||||
|  | @ -105,19 +96,17 @@ router.get('/admin/orders/filter/:search', restrict, (req, res, next) => { | |||
|     }); | ||||
| 
 | ||||
|     // we search on the lunr indexes
 | ||||
|     db.orders.find({ _id: { $in: lunrIdArray } }).toArray((err, orders) => { | ||||
|         if(err){ | ||||
|             console.info(err.stack); | ||||
|         } | ||||
|     const orders = await db.orders.find({ _id: { $in: lunrIdArray } }).toArray(); | ||||
| 
 | ||||
|     // If API request, return json
 | ||||
|     if(req.apiAuthenticated){ | ||||
|             return res.status(200).json({ | ||||
|         res.status(200).json({ | ||||
|             orders | ||||
|         }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|         return res.render('orders', { | ||||
|     res.render('orders', { | ||||
|         title: 'Order results', | ||||
|         orders: orders, | ||||
|         admin: true, | ||||
|  | @ -128,39 +117,60 @@ router.get('/admin/orders/filter/:search', restrict, (req, res, next) => { | |||
|         messageType: common.clearSessionValue(req.session, 'messageType'), | ||||
|         helpers: req.handlebars.helpers | ||||
|     }); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // order product
 | ||||
| router.get('/admin/order/delete/:id', restrict, (req, res) => { | ||||
| router.get('/admin/order/delete/:id', restrict, async(req, res) => { | ||||
|     const db = req.app.db; | ||||
| 
 | ||||
|     // remove the order
 | ||||
|     db.orders.deleteOne({ _id: common.getId(req.params.id) }, {}, (err, numRemoved) => { | ||||
|         if(err){ | ||||
|             console.info(err.stack); | ||||
|         } | ||||
|     try{ | ||||
|         await db.orders.deleteOne({ _id: common.getId(req.params.id) }); | ||||
| 
 | ||||
|         // remove the index
 | ||||
|         indexOrders(req.app) | ||||
|         .then(() => { | ||||
|             if(req.apiAuthenticated){ | ||||
|                 res.status(200).json({ | ||||
|                     message: 'Order successfully deleted' | ||||
|                 }); | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             // redirect home
 | ||||
|             req.session.message = 'Order successfully deleted'; | ||||
|             req.session.messageType = 'success'; | ||||
|             res.redirect('/admin/orders'); | ||||
|         }); | ||||
|     }catch(ex){ | ||||
|         console.log('Cannot delete order', ex); | ||||
|         if(req.apiAuthenticated){ | ||||
|             res.status(200).json({ | ||||
|                 message: 'Error deleting order' | ||||
|             }); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // redirect home
 | ||||
|         req.session.message = 'Error deleting order'; | ||||
|         req.session.messageType = 'danger'; | ||||
|         res.redirect('/admin/orders'); | ||||
|     } | ||||
| }); | ||||
| 
 | ||||
| // update order status
 | ||||
| router.post('/admin/order/statusupdate', restrict, checkAccess, (req, res) => { | ||||
| router.post('/admin/order/statusupdate', restrict, checkAccess, async (req, res) => { | ||||
|     const db = req.app.db; | ||||
|     db.orders.updateOne({ _id: common.getId(req.body.order_id) }, { $set: { orderStatus: req.body.status } }, { multi: false }, (err, numReplaced) => { | ||||
|         if(err){ | ||||
|             console.info(err.stack); | ||||
|     try{ | ||||
|         await db.orders.updateOne({ | ||||
|             _id: common.getId(req.body.order_id) }, | ||||
|             { $set: { orderStatus: req.body.status } | ||||
|         }, { multi: false }); | ||||
|         return res.status(200).json({ message: 'Status successfully updated' }); | ||||
|     }catch(ex){ | ||||
|         console.info('Error updating status', ex); | ||||
|         return res.status(400).json({ message: 'Failed to update the order status' }); | ||||
|     } | ||||
|         return res.status(200).json({ message: 'Status successfully updated' }); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| module.exports = router; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue