Made routes more logical
							parent
							
								
									9d75471488
								
							
						
					
					
						commit
						ab35c2814f
					
				|  | @ -428,7 +428,7 @@ $(document).ready(function (){ | |||
| 
 | ||||
|         $.ajax({ | ||||
|             method: 'POST', | ||||
|             url: '/admin/product/addtocart', | ||||
|             url: '/product/addtocart', | ||||
|             data: {productId: $('#productId').val(), productQuantity: $('#product_quantity').val(), productOptions: JSON.stringify(productOptions)} | ||||
|         }) | ||||
| 		.done(function(msg){ | ||||
|  | @ -460,7 +460,7 @@ $(document).ready(function (){ | |||
|         }else{ | ||||
|             $.ajax({ | ||||
|                 method: 'POST', | ||||
|                 url: '/admin/product/addtocart', | ||||
|                 url: '/product/addtocart', | ||||
|                 data: {productId: $(this).attr('data-id')} | ||||
|             }) | ||||
|             .done(function(msg){ | ||||
|  | @ -477,7 +477,7 @@ $(document).ready(function (){ | |||
|     $(document).on('click', '#empty-cart', function(e){ | ||||
|         $.ajax({ | ||||
|             method: 'POST', | ||||
|             url: '/admin/product/emptycart' | ||||
|             url: '/product/emptycart' | ||||
|         }) | ||||
| 		.done(function(msg){ | ||||
|             $('#cart-count').text(msg.totalCartItems); | ||||
|  | @ -612,7 +612,7 @@ $(document).ready(function (){ | |||
| function deleteFromCart(element){ | ||||
|     $.ajax({ | ||||
|         method: 'POST', | ||||
|         url: '/admin/product/removefromcart', | ||||
|         url: '/product/removefromcart', | ||||
|         data: {cart_index: element} | ||||
|     }) | ||||
|     .done(function(msg){ | ||||
|  | @ -672,7 +672,7 @@ function updateCart(){ | |||
|     // update cart on server
 | ||||
|     $.ajax({ | ||||
|         method: 'POST', | ||||
|         url: '/admin/product/updatecart', | ||||
|         url: '/product/updatecart', | ||||
|         data: {items: JSON.stringify(cartItems)} | ||||
|     }) | ||||
|     .done(function(msg){ | ||||
|  |  | |||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										221
									
								
								routes/admin.js
								
								
								
								
							
							
						
						
									
										221
									
								
								routes/admin.js
								
								
								
								
							|  | @ -1,10 +1,8 @@ | |||
| let express = require('express'); | ||||
| let common = require('./common'); | ||||
| let escape = require('html-entities').AllHtmlEntities; | ||||
| let async = require('async'); | ||||
| let colors = require('colors'); | ||||
| let _ = require('lodash'); | ||||
| let router = express.Router(); | ||||
| const express = require('express'); | ||||
| const common = require('./common'); | ||||
| const escape = require('html-entities').AllHtmlEntities; | ||||
| const colors = require('colors'); | ||||
| const router = express.Router(); | ||||
| 
 | ||||
| // Admin section
 | ||||
| router.get('/', common.restrict, (req, res, next) => { | ||||
|  | @ -171,141 +169,106 @@ router.get('/products', common.restrict, (req, res, next) => { | |||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // Admin section
 | ||||
| router.post('/product/addtocart', (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
|     let productQuantity = req.body.productQuantity ? parseInt(req.body.productQuantity) : 1; | ||||
| // logout
 | ||||
| router.get('/logout', (req, res) => { | ||||
|     req.session.user = null; | ||||
|     req.session.message = null; | ||||
|     req.session.messageType = null; | ||||
|     res.redirect('/'); | ||||
| }); | ||||
| 
 | ||||
|     // setup cart object if it doesn't exist
 | ||||
|     if(!req.session.cart){ | ||||
|         req.session.cart = []; | ||||
|     } | ||||
| // login form
 | ||||
| router.get('/login', (req, res) => { | ||||
|     let db = req.app.db; | ||||
| 
 | ||||
|     db.products.findOne({_id: common.getId(req.body.productId)}, (err, product) => { | ||||
|     db.users.count({}, (err, userCount) => { | ||||
|         if(err){ | ||||
|             console.error(colors.red('Error adding to cart', err)); | ||||
|             // if there are no users set the "needsSetup" session
 | ||||
|             req.session.needsSetup = true; | ||||
|             res.redirect('/admin/setup'); | ||||
|         } | ||||
| 
 | ||||
|         if(product){ | ||||
|             let productPrice = parseFloat(product.productPrice).toFixed(2); | ||||
| 
 | ||||
|             // doc used to test if existing in the cart with the options. If not found, we add new.
 | ||||
|             let options = {}; | ||||
|             if(req.body.productOptions){ | ||||
|                 options = JSON.parse(req.body.productOptions); | ||||
|             } | ||||
|             let findDoc = { | ||||
|                 productId: req.body.productId, | ||||
|                 options: options | ||||
|             }; | ||||
| 
 | ||||
|             // if exists we add to the existing value
 | ||||
|             let cartIndex = _.findIndex(req.session.cart, findDoc); | ||||
|             if(cartIndex > -1){ | ||||
|                 req.session.cart[cartIndex].quantity = parseInt(req.session.cart[cartIndex].quantity) + productQuantity; | ||||
|                 req.session.cart[cartIndex].totalItemPrice = productPrice * parseInt(req.session.cart[cartIndex].quantity); | ||||
|         // we check for a user. If one exists, redirect to login form otherwise setup
 | ||||
|         if(userCount > 0){ | ||||
|             // set needsSetup to false as a user exists
 | ||||
|             req.session.needsSetup = false; | ||||
|             res.render('login', { | ||||
|                 title: 'Login', | ||||
|                 referringUrl: req.header('Referer'), | ||||
|                 config: common.getConfig(), | ||||
|                 message: common.clearSessionValue(req.session, 'message'), | ||||
|                 messageType: common.clearSessionValue(req.session, 'messageType'), | ||||
|                 helpers: req.handlebars.helpers, | ||||
|                 showFooter: 'showFooter' | ||||
|             }); | ||||
|         }else{ | ||||
|                 // Doesnt exist so we add to the cart session
 | ||||
|                 req.session.cartTotalItems = req.session.cartTotalItems + productQuantity; | ||||
| 
 | ||||
|                 // new product deets
 | ||||
|                 let productObj = {}; | ||||
|                 productObj.productId = req.body.productId; | ||||
|                 productObj.title = product.productTitle; | ||||
|                 productObj.quantity = productQuantity; | ||||
|                 productObj.totalItemPrice = productPrice * productQuantity; | ||||
|                 productObj.options = options; | ||||
|                 productObj.productImage = product.productImage; | ||||
|                 if(product.productPermalink){ | ||||
|                     productObj.link = product.productPermalink; | ||||
|                 }else{ | ||||
|                     productObj.link = product._id; | ||||
|                 } | ||||
| 
 | ||||
|                 // merge into the current cart
 | ||||
|                 req.session.cart.push(productObj); | ||||
|             } | ||||
| 
 | ||||
|             // update total cart amount
 | ||||
|             common.updateTotalCartAmount(req, res); | ||||
| 
 | ||||
|             // update how many products in the shopping cart
 | ||||
|             req.session.cartTotalItems = Object.keys(req.session.cart).length; | ||||
|             res.status(200).json({message: 'Cart successfully updated', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|         }else{ | ||||
|             res.status(400).json({message: 'Error updating cart. Please try again.'}); | ||||
|             // if there are no users set the "needsSetup" session
 | ||||
|             req.session.needsSetup = true; | ||||
|             res.redirect('/admin/setup'); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // Updates a single product quantity
 | ||||
| router.post('/product/updatecart', (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
|     let cartItems = JSON.parse(req.body.items); | ||||
|     let hasError = false; | ||||
| // login the user and check the password
 | ||||
| router.post('/login_action', (req, res) => { | ||||
|     let db = req.app.db; | ||||
|     let bcrypt = req.bcrypt; | ||||
| 
 | ||||
|     async.eachSeries(cartItems, (cartItem, callback) => { | ||||
|         let productQuantity = cartItem.itemQuantity ? cartItem.itemQuantity : 1; | ||||
|         if(cartItem.itemQuantity === 0){ | ||||
|             // quantity equals zero so we remove the item
 | ||||
|             req.session.cart.splice(cartItem.cartIndex, 1); | ||||
|             callback(null); | ||||
|         }else{ | ||||
|             db.products.findOne({_id: common.getId(cartItem.productId)}, (err, product) => { | ||||
|     db.users.findOne({userEmail: req.body.email}, (err, user) => { | ||||
|         if(err){ | ||||
|                     console.error(colors.red('Error updating cart', err)); | ||||
|                 } | ||||
|                 if(product){ | ||||
|                     let productPrice = parseFloat(product.productPrice).toFixed(2); | ||||
|                     if(req.session.cart[cartItem.cartIndex]){ | ||||
|                         req.session.cart[cartItem.cartIndex].quantity = productQuantity; | ||||
|                         req.session.cart[cartItem.cartIndex].totalItemPrice = productPrice * productQuantity; | ||||
|                         callback(null); | ||||
|             req.session.message = 'Cannot find user.'; | ||||
|             req.session.messageType = 'danger'; | ||||
|             res.redirect('/admin/login'); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // check if user exists with that email
 | ||||
|         if(user === undefined || user === null){ | ||||
|             req.session.message = 'A user with that email does not exist.'; | ||||
|             req.session.messageType = 'danger'; | ||||
|             res.redirect('/admin/login'); | ||||
|         }else{ | ||||
|                     hasError = true; | ||||
|                     callback(null); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     }, () => { | ||||
|         // update total cart amount
 | ||||
|         common.updateTotalCartAmount(req, res); | ||||
| 
 | ||||
|         // show response
 | ||||
|         if(hasError === false){ | ||||
|             res.status(200).json({message: 'Cart successfully updated', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|             // we have a user under that email so we compare the password
 | ||||
|             if(bcrypt.compareSync(req.body.password, user.userPassword) === true){ | ||||
|                 req.session.user = req.body.email; | ||||
|                 req.session.usersName = user.usersName; | ||||
|                 req.session.userId = user._id.toString(); | ||||
|                 req.session.isAdmin = user.isAdmin; | ||||
|                 res.redirect('/admin'); | ||||
|             }else{ | ||||
|             res.status(400).json({message: 'There was an error updating the cart', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|                 // password is not correct
 | ||||
|                 req.session.message = 'Access denied. Check password and try again.'; | ||||
|                 req.session.messageType = 'danger'; | ||||
|                 res.redirect('/admin/login'); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // Remove single product from cart
 | ||||
| router.post('/product/removefromcart', (req, res, next) => { | ||||
|     // remove item from cart
 | ||||
|     async.each(req.session.cart, (item, callback) => { | ||||
|         if(item){ | ||||
|             if(item.productId === req.body.cart_index){ | ||||
|                 req.session.cart.splice(req.session.cart.indexOf(item), 1); | ||||
|             } | ||||
|         } | ||||
|         callback(); | ||||
|     }, () => { | ||||
|         // update total cart amount
 | ||||
|         common.updateTotalCartAmount(req, res); | ||||
|         res.status(200).json({message: 'Product successfully removed', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|     }); | ||||
| }); | ||||
| // setup form is shown when there are no users setup in the DB
 | ||||
| router.get('/setup', (req, res) => { | ||||
|     let db = req.app.db; | ||||
| 
 | ||||
| // Totally empty the cart
 | ||||
| router.post('/product/emptycart', (req, res, next) => { | ||||
|     delete req.session.cart; | ||||
|     delete req.session.orderId; | ||||
| 
 | ||||
|     // update total cart amount
 | ||||
|     common.updateTotalCartAmount(req, res); | ||||
|     res.status(200).json({message: 'Cart successfully emptied', totalCartItems: 0}); | ||||
|     db.users.count({}, (err, userCount) => { | ||||
|         if(err){ | ||||
|             console.error(colors.red('Error getting users for setup', err)); | ||||
|         } | ||||
|         // dont allow the user to "re-setup" if a user exists.
 | ||||
|         // set needsSetup to false as a user exists
 | ||||
|         req.session.needsSetup = false; | ||||
|         if(userCount === 0){ | ||||
|             req.session.needsSetup = true; | ||||
|             res.render('setup', { | ||||
|                 title: 'Setup', | ||||
|                 config: common.getConfig(), | ||||
|                 helpers: req.handlebars.helpers, | ||||
|                 message: common.clearSessionValue(req.session, 'message'), | ||||
|                 messageType: common.clearSessionValue(req.session, 'messageType'), | ||||
|                 showFooter: 'showFooter' | ||||
|             }); | ||||
|         }else{ | ||||
|             res.redirect('/admin/login'); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // Admin section
 | ||||
|  | @ -689,15 +652,15 @@ router.post('/setup_action', (req, res) => { | |||
|                     console.error(colors.red('Failed to insert user: ' + err)); | ||||
|                     req.session.message = 'Setup failed'; | ||||
|                     req.session.messageType = 'danger'; | ||||
|                     res.redirect('/setup'); | ||||
|                     res.redirect('/admin/setup'); | ||||
|                 }else{ | ||||
|                     req.session.message = 'User account inserted'; | ||||
|                     req.session.messageType = 'success'; | ||||
|                     res.redirect('/login'); | ||||
|                     res.redirect('/admin/login'); | ||||
|                 } | ||||
|             }); | ||||
|         }else{ | ||||
|             res.redirect('/login'); | ||||
|             res.redirect('/admin/login'); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
|  | @ -712,7 +675,7 @@ router.post('/user/insert', common.restrict, (req, res) => { | |||
|     let urlParts = url.parse(req.header('Referer')); | ||||
| 
 | ||||
|     let isAdmin = 'false'; | ||||
|     if(urlParts.path === '/setup'){ | ||||
|     if(urlParts.path === '/admin/setup'){ | ||||
|         isAdmin = 'true'; | ||||
|     } | ||||
| 
 | ||||
|  | @ -755,9 +718,9 @@ router.post('/user/insert', common.restrict, (req, res) => { | |||
| 
 | ||||
|             // if from setup we add user to session and redirect to login.
 | ||||
|             // Otherwise we show users screen
 | ||||
|             if(urlParts.path === '/setup'){ | ||||
|             if(urlParts.path === '/admin/setup'){ | ||||
|                 req.session.user = req.body.userEmail; | ||||
|                 res.redirect('/login'); | ||||
|                 res.redirect('/admin/login'); | ||||
|                 return; | ||||
|             } | ||||
|             res.redirect('/admin/users'); | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ let ObjectId = require('mongodb').ObjectID; | |||
| exports.checkLogin = (req, res, next) => { | ||||
|     // if not protecting we check for public pages and don't checkLogin
 | ||||
|     if(req.session.needsSetup === true){ | ||||
|         res.redirect('/setup'); | ||||
|         res.redirect('/admin/setup'); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|  | @ -23,7 +23,7 @@ exports.checkLogin = (req, res, next) => { | |||
|         next(); | ||||
|         return; | ||||
|     } | ||||
|     res.redirect('/login'); | ||||
|     res.redirect('/admin/login'); | ||||
| }; | ||||
| 
 | ||||
| exports.showCartCloseBtn = (page) => { | ||||
|  |  | |||
							
								
								
									
										208
									
								
								routes/index.js
								
								
								
								
							
							
						
						
									
										208
									
								
								routes/index.js
								
								
								
								
							|  | @ -1,6 +1,7 @@ | |||
| const express = require('express'); | ||||
| const router = express.Router(); | ||||
| const colors = require('colors'); | ||||
| const async = require('async'); | ||||
| const _ = require('lodash'); | ||||
| const common = require('./common'); | ||||
| 
 | ||||
|  | @ -134,104 +135,141 @@ router.get('/product/:id', (req, res) => { | |||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // logout
 | ||||
| router.get('/logout', (req, res) => { | ||||
|     req.session.user = null; | ||||
|     req.session.message = null; | ||||
|     req.session.messageType = null; | ||||
|     res.redirect('/'); | ||||
| }); | ||||
| // Updates a single product quantity
 | ||||
| router.post('/product/updatecart', (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
|     let cartItems = JSON.parse(req.body.items); | ||||
|     let hasError = false; | ||||
| 
 | ||||
| // login form
 | ||||
| router.get('/login', (req, res) => { | ||||
|     let db = req.app.db; | ||||
| 
 | ||||
|     db.users.count({}, (err, userCount) => { | ||||
|     async.eachSeries(cartItems, (cartItem, callback) => { | ||||
|         let productQuantity = cartItem.itemQuantity ? cartItem.itemQuantity : 1; | ||||
|         if(cartItem.itemQuantity === 0){ | ||||
|             // quantity equals zero so we remove the item
 | ||||
|             req.session.cart.splice(cartItem.cartIndex, 1); | ||||
|             callback(null); | ||||
|         }else{ | ||||
|             db.products.findOne({_id: common.getId(cartItem.productId)}, (err, product) => { | ||||
|                 if(err){ | ||||
|             // if there are no users set the "needsSetup" session
 | ||||
|             req.session.needsSetup = true; | ||||
|             res.redirect('/setup'); | ||||
|                     console.error(colors.red('Error updating cart', err)); | ||||
|                 } | ||||
|                 if(product){ | ||||
|                     let productPrice = parseFloat(product.productPrice).toFixed(2); | ||||
|                     if(req.session.cart[cartItem.cartIndex]){ | ||||
|                         req.session.cart[cartItem.cartIndex].quantity = productQuantity; | ||||
|                         req.session.cart[cartItem.cartIndex].totalItemPrice = productPrice * productQuantity; | ||||
|                         callback(null); | ||||
|                     } | ||||
|         // we check for a user. If one exists, redirect to login form otherwise setup
 | ||||
|         if(userCount > 0){ | ||||
|             // set needsSetup to false as a user exists
 | ||||
|             req.session.needsSetup = false; | ||||
|             res.render('login', { | ||||
|                 title: 'Login', | ||||
|                 referringUrl: req.header('Referer'), | ||||
|                 config: common.getConfig(), | ||||
|                 message: common.clearSessionValue(req.session, 'message'), | ||||
|                 messageType: common.clearSessionValue(req.session, 'messageType'), | ||||
|                 helpers: req.handlebars.helpers, | ||||
|                 showFooter: 'showFooter' | ||||
|             }); | ||||
|                 }else{ | ||||
|             // if there are no users set the "needsSetup" session
 | ||||
|             req.session.needsSetup = true; | ||||
|             res.redirect('/setup'); | ||||
|                     hasError = true; | ||||
|                     callback(null); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     }, () => { | ||||
|         // update total cart amount
 | ||||
|         common.updateTotalCartAmount(req, res); | ||||
| 
 | ||||
|         // show response
 | ||||
|         if(hasError === false){ | ||||
|             res.status(200).json({message: 'Cart successfully updated', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|         }else{ | ||||
|             res.status(400).json({message: 'There was an error updating the cart', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // setup form is shown when there are no users setup in the DB
 | ||||
| router.get('/setup', (req, res) => { | ||||
|     let db = req.app.db; | ||||
| // Remove single product from cart
 | ||||
| router.post('/product/removefromcart', (req, res, next) => { | ||||
|     // remove item from cart
 | ||||
|     async.each(req.session.cart, (item, callback) => { | ||||
|         if(item){ | ||||
|             if(item.productId === req.body.cart_index){ | ||||
|                 req.session.cart.splice(req.session.cart.indexOf(item), 1); | ||||
|             } | ||||
|         } | ||||
|         callback(); | ||||
|     }, () => { | ||||
|         // update total cart amount
 | ||||
|         common.updateTotalCartAmount(req, res); | ||||
|         res.status(200).json({message: 'Product successfully removed', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
|     db.users.count({}, (err, userCount) => { | ||||
| // Totally empty the cart
 | ||||
| router.post('/product/emptycart', (req, res, next) => { | ||||
|     delete req.session.cart; | ||||
|     delete req.session.orderId; | ||||
| 
 | ||||
|     // update total cart amount
 | ||||
|     common.updateTotalCartAmount(req, res); | ||||
|     res.status(200).json({message: 'Cart successfully emptied', totalCartItems: 0}); | ||||
| }); | ||||
| 
 | ||||
| // Add item to cart
 | ||||
| router.post('/product/addtocart', (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
|     let productQuantity = req.body.productQuantity ? parseInt(req.body.productQuantity) : 1; | ||||
| 
 | ||||
|     // setup cart object if it doesn't exist
 | ||||
|     if(!req.session.cart){ | ||||
|         req.session.cart = []; | ||||
|     } | ||||
| 
 | ||||
|     // Get the item from the DB
 | ||||
|     db.products.findOne({_id: common.getId(req.body.productId)}, (err, product) => { | ||||
|         if(err){ | ||||
|             console.error(colors.red('Error getting users for setup', err)); | ||||
|         } | ||||
|         // dont allow the user to "re-setup" if a user exists.
 | ||||
|         // set needsSetup to false as a user exists
 | ||||
|         req.session.needsSetup = false; | ||||
|         if(userCount === 0){ | ||||
|             req.session.needsSetup = true; | ||||
|             res.render('setup', { | ||||
|                 title: 'Setup', | ||||
|                 config: common.getConfig(), | ||||
|                 helpers: req.handlebars.helpers, | ||||
|                 message: common.clearSessionValue(req.session, 'message'), | ||||
|                 messageType: common.clearSessionValue(req.session, 'messageType'), | ||||
|                 showFooter: 'showFooter' | ||||
|             }); | ||||
|         }else{ | ||||
|             res.redirect('/login'); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // login the user and check the password
 | ||||
| router.post('/login_action', (req, res) => { | ||||
|     let db = req.app.db; | ||||
|     let bcrypt = req.bcrypt; | ||||
| 
 | ||||
|     db.users.findOne({userEmail: req.body.email}, (err, user) => { | ||||
|         if(err){ | ||||
|             req.session.message = 'Cannot find user.'; | ||||
|             req.session.messageType = 'danger'; | ||||
|             res.redirect('/login'); | ||||
|             return; | ||||
|             console.error(colors.red('Error adding to cart', err)); | ||||
|         } | ||||
| 
 | ||||
|         // check if user exists with that email
 | ||||
|         if(user === undefined || user === null){ | ||||
|             req.session.message = 'A user with that email does not exist.'; | ||||
|             req.session.messageType = 'danger'; | ||||
|             res.redirect('/login'); | ||||
|         }else{ | ||||
|             // we have a user under that email so we compare the password
 | ||||
|             if(bcrypt.compareSync(req.body.password, user.userPassword) === true){ | ||||
|                 req.session.user = req.body.email; | ||||
|                 req.session.usersName = user.usersName; | ||||
|                 req.session.userId = user._id.toString(); | ||||
|                 req.session.isAdmin = user.isAdmin; | ||||
|                 res.redirect('/admin'); | ||||
|             }else{ | ||||
|                 // password is not correct
 | ||||
|                 req.session.message = 'Access denied. Check password and try again.'; | ||||
|                 req.session.messageType = 'danger'; | ||||
|                 res.redirect('/login'); | ||||
|         // We item is found, add it to the cart
 | ||||
|         if(product){ | ||||
|             let productPrice = parseFloat(product.productPrice).toFixed(2); | ||||
| 
 | ||||
|             // Doc used to test if existing in the cart with the options. If not found, we add new.
 | ||||
|             let options = {}; | ||||
|             if(req.body.productOptions){ | ||||
|                 options = JSON.parse(req.body.productOptions); | ||||
|             } | ||||
|             let findDoc = { | ||||
|                 productId: req.body.productId, | ||||
|                 options: options | ||||
|             }; | ||||
| 
 | ||||
|             // if exists we add to the existing value
 | ||||
|             let cartIndex = _.findIndex(req.session.cart, findDoc); | ||||
|             if(cartIndex > -1){ | ||||
|                 req.session.cart[cartIndex].quantity = parseInt(req.session.cart[cartIndex].quantity) + productQuantity; | ||||
|                 req.session.cart[cartIndex].totalItemPrice = productPrice * parseInt(req.session.cart[cartIndex].quantity); | ||||
|             }else{ | ||||
|                 // Doesnt exist so we add to the cart session
 | ||||
|                 req.session.cartTotalItems = req.session.cartTotalItems + productQuantity; | ||||
| 
 | ||||
|                 // new product deets
 | ||||
|                 let productObj = {}; | ||||
|                 productObj.productId = req.body.productId; | ||||
|                 productObj.title = product.productTitle; | ||||
|                 productObj.quantity = productQuantity; | ||||
|                 productObj.totalItemPrice = productPrice * productQuantity; | ||||
|                 productObj.options = options; | ||||
|                 productObj.productImage = product.productImage; | ||||
|                 if(product.productPermalink){ | ||||
|                     productObj.link = product.productPermalink; | ||||
|                 }else{ | ||||
|                     productObj.link = product._id; | ||||
|                 } | ||||
| 
 | ||||
|                 // merge into the current cart
 | ||||
|                 req.session.cart.push(productObj); | ||||
|             } | ||||
| 
 | ||||
|             // update total cart amount
 | ||||
|             common.updateTotalCartAmount(req, res); | ||||
| 
 | ||||
|             // update how many products in the shopping cart
 | ||||
|             req.session.cartTotalItems = Object.keys(req.session.cart).length; | ||||
|             res.status(200).json({message: 'Cart successfully updated', totalCartItems: Object.keys(req.session.cart).length}); | ||||
|         }else{ | ||||
|             res.status(400).json({message: 'Error updating cart. Please try again.'}); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
|  |  | |||
|  | @ -107,7 +107,7 @@ | |||
|                         {{/ifCond}} | ||||
|                         {{/unless}} | ||||
|                         {{#if session.user}} | ||||
| 							<li><a href="/logout"><i class="fa fa-sign-out" aria-hidden="true"> </i>Logout</a></li> | ||||
| 							<li><a href="/admin/logout"><i class="fa fa-sign-out" aria-hidden="true"> </i>Logout</a></li> | ||||
| 						{{/if}} | ||||
| 					</ul> | ||||
| 				</div> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue