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