express-cart-tea
Version:
A fully functioning Node.js shopping cart with Stripe, PayPal and Authorize.net payments.
107 lines (98 loc) • 2.68 kB
JavaScript
const _ = require('lodash');
const getMenu = (db) => {
return db.menu.findOne({});
};
// creates a new menu item
const newMenu = (req) => {
const db = req.app.db;
return getMenu(db)
.then((menu) => {
// if no menu present
if(!menu){
menu = {};
menu.items = [];
}
const newNav = {
title: req.body.navMenu,
link: req.body.navLink,
order: Object.keys(menu.items).length + 1
};
menu.items.push(newNav);
return db.menu.updateOne({}, { $set: { items: menu.items } }, { upsert: true })
.then(() => {
return true;
});
})
.catch((err) => {
console.log('Error creating new menu', err);
return false;
});
};
// delete a menu item
const deleteMenu = (req, menuIndex) => {
const db = req.app.db;
return getMenu(db)
.then((menu) => {
// Remove menu item
menu.items.splice(menuIndex, 1);
return db.menu.updateOne({}, { $set: { items: menu.items } }, { upsert: true })
.then(() => {
return true;
});
})
.catch(() => {
return false;
});
};
// updates and existing menu item
const updateMenu = (req) => {
const db = req.app.db;
return getMenu(db)
.then((menu) => {
// find menu item and update it
const menuIndex = _.findIndex(menu.items, ['title', req.body.navId]);
menu.items[menuIndex].title = req.body.navMenu;
menu.items[menuIndex].link = req.body.navLink;
return db.menu.updateOne({}, { $set: { items: menu.items } }, { upsert: true })
.then(() => {
return true;
});
})
.catch(() => {
return false;
});
};
const sortMenu = (menu) => {
if(menu && menu.items){
menu.items = _.sortBy(menu.items, 'order');
return menu;
}
return {};
};
// orders the menu
const orderMenu = (req, res) => {
const db = req.app.db;
return getMenu(db)
.then((menu) => {
const menuOrder = req.body['order[]'];
// update the order
for(let i = 0; i < menuOrder.length; i++){
_.find(menu.items, ['title', menuOrder[i]]).order = i;
}
return db.menu.updateOne({}, { $set: { items: menu.items } }, { upsert: true })
.then(() => {
return true;
});
})
.catch(() => {
return false;
});
};
module.exports = {
getMenu,
newMenu,
deleteMenu,
updateMenu,
sortMenu,
orderMenu
};