diff --git a/app.js b/app.js index bf09129..3bf9d79 100644 --- a/app.js +++ b/app.js @@ -356,7 +356,7 @@ initDb(config.databaseConnectionString, async (err, db) => { }); // Remove any invalid cart holds - await db.cart.remove({ + await db.cart.deleteMany({ sessionId: { $nin: validSessionIds } }); }); diff --git a/lib/common.js b/lib/common.js index f6b2be5..0b3d3de 100755 --- a/lib/common.js +++ b/lib/common.js @@ -500,7 +500,7 @@ const getData = (req, page, query) => { // Run our queries return Promise.all([ db.products.find(query).skip(skip).limit(parseInt(numberProducts)).toArray(), - db.products.count(query) + db.products.countDocuments(query) ]) .then((result) => { const returnData = { data: result[0], totalProducts: result[1] }; diff --git a/lib/testdata.js b/lib/testdata.js index cf9d038..9cee8af 100644 --- a/lib/testdata.js +++ b/lib/testdata.js @@ -12,10 +12,10 @@ const config = getConfig(); initDb(config.databaseConnectionString, (err, db) => { Promise.all([ - db.users.remove({}, {}), - db.customers.remove({}, {}), - db.products.remove({}, {}), - db.menu.remove({}, {}) + db.users.deleteMany({}, {}), + db.customers.deleteMany({}, {}), + db.products.deleteMany({}, {}), + db.menu.deleteMany({}, {}) ]) .then(() => { Promise.all([ diff --git a/routes/admin.js b/routes/admin.js index 1b8733c..335016b 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -29,7 +29,7 @@ router.get('/admin/logout', (req, res) => { router.get('/admin/login', async (req, res) => { const db = req.app.db; - const userCount = await db.users.count({}); + const userCount = await db.users.countDocuments({}); // we check for a user. If one exists, redirect to login form otherwise setup if(userCount && userCount > 0){ // set needsSetup to false as a user exists @@ -80,7 +80,7 @@ router.post('/admin/login_action', async (req, res) => { router.get('/admin/setup', async (req, res) => { const db = req.app.db; - const userCount = await db.users.count({}); + const userCount = await db.users.countDocuments({}); // dont allow the user to "re-setup" if a user exists. // set needsSetup to false as a user exists req.session.needsSetup = false; @@ -111,11 +111,11 @@ router.post('/admin/setup_action', async (req, res) => { }; // check for users - const userCount = await db.users.count({}); + const userCount = await db.users.countDocuments({}); if(userCount && userCount === 0){ // email is ok to be used. try{ - await db.users.insert(doc); + await db.users.insertOne(doc); req.session.message = 'User account inserted'; req.session.messageType = 'success'; res.redirect('/admin/login'); @@ -279,7 +279,7 @@ router.post('/admin/settings/pages/update', restrict, checkAccess, async (req, r } try{ - await db.pages.update({ _id: common.getId(req.body.page_id) }, { $set: doc }, {}); + await db.pages.updateOne({ _id: common.getId(req.body.page_id) }, { $set: doc }, {}); res.status(200).json({ message: 'Page updated successfully', page_id: req.body.page_id }); }catch(ex){ res.status(400).json({ message: 'Error updating page. Please try again.' }); @@ -287,7 +287,7 @@ router.post('/admin/settings/pages/update', restrict, checkAccess, async (req, r }else{ // insert page try{ - const newDoc = await db.pages.insert(doc); + const newDoc = await db.pages.insertOne(doc); res.status(200).json({ message: 'New page successfully created', page_id: newDoc._id }); return; }catch(ex){ @@ -300,7 +300,7 @@ router.post('/admin/settings/pages/update', restrict, checkAccess, async (req, r router.get('/admin/settings/pages/delete/:page', restrict, checkAccess, async (req, res) => { const db = req.app.db; try{ - await db.pages.remove({ _id: common.getId(req.params.page) }, {}); + await db.pages.deleteOne({ _id: common.getId(req.params.page) }, {}); req.session.message = 'Page successfully deleted'; req.session.messageType = 'success'; res.redirect('/admin/settings/pages'); @@ -365,7 +365,7 @@ router.post('/admin/api/validate_permalink', async (req, res) => { query = { productPermalink: req.body.permalink, _id: { $ne: common.getId(req.body.docId) } }; } - const products = await db.products.count(query); + const products = await db.products.countDocuments(query); if(products && products > 0){ res.status(400).json({ message: 'Permalink already exists' }); return; @@ -429,7 +429,7 @@ router.post('/admin/file/upload', restrict, checkAccess, upload.single('upload_f // if there isn't a product featured image, set this one if(!product.productImage){ - await db.products.update({ _id: common.getId(req.body.productId) }, { $set: { productImage: imagePath } }, { multi: false }); + await db.products.updateOne({ _id: common.getId(req.body.productId) }, { $set: { productImage: imagePath } }, { multi: false }); req.session.message = 'File uploaded successfully'; req.session.messageType = 'success'; res.redirect('/admin/product/edit/' + req.body.productId); diff --git a/routes/customer.js b/routes/customer.js index 1dd2adf..2049963 100644 --- a/routes/customer.js +++ b/routes/customer.js @@ -216,7 +216,7 @@ router.post('/customer/forgotten_action', (req, res) => { // if we have a customer, set a token, expiry and email it if(customer){ const tokenExpiry = Date.now() + 3600000; - db.customers.update({ email: req.body.email }, { $set: { resetToken: passwordToken, resetTokenExpiry: tokenExpiry } }, { multi: false }, (err, numReplaced) => { + db.customers.updateOne({ email: req.body.email }, { $set: { resetToken: passwordToken, resetTokenExpiry: tokenExpiry } }, { multi: false }, (err, numReplaced) => { // send forgotten password email const mailOpts = { to: req.body.email, @@ -282,7 +282,7 @@ router.post('/customer/reset/:token', (req, res) => { // update the password and remove the token const newPassword = bcrypt.hashSync(req.body.password, 10); - db.customers.update({ email: customer.email }, { $set: { password: newPassword, resetToken: undefined, resetTokenExpiry: undefined } }, { multi: false }, (err, numReplaced) => { + db.customers.updateOne({ email: customer.email }, { $set: { password: newPassword, resetToken: undefined, resetTokenExpiry: undefined } }, { multi: false }, (err, numReplaced) => { const mailOpts = { to: customer.email, subject: 'Password successfully reset', diff --git a/routes/index.js b/routes/index.js index f3e762b..0f05597 100644 --- a/routes/index.js +++ b/routes/index.js @@ -39,7 +39,7 @@ router.get('/payment/:orderId', async (req, res, next) => { } // Update product stock - await db.products.update({ + await db.products.updateOne({ _id: getId(product.productId) }, { $set: { @@ -221,7 +221,7 @@ router.post('/product/updatecart', (req, res, next) => { updateTotalCartAmount(req, res); // Update cart to the DB - await db.cart.update({ sessionId: req.session.id }, { + await db.cart.updateOne({ sessionId: req.session.id }, { $set: { cart: req.session.cart } }); @@ -254,7 +254,7 @@ router.post('/product/removefromcart', (req, res, next) => { callback(); }, async () => { // Update cart in DB - await db.cart.update({ sessionId: req.session.id }, { + await db.cart.updateOne({ sessionId: req.session.id }, { $set: { cart: req.session.cart } }); // update total cart amount @@ -276,7 +276,7 @@ router.post('/product/emptycart', async (req, res, next) => { delete req.session.orderId; // Remove cart from DB - await db.cart.removeOne({ sessionId: req.session.id }); + await db.cart.deleteOne({ sessionId: req.session.id }); // update total cart amount updateTotalCartAmount(req, res); @@ -387,7 +387,7 @@ router.post('/product/addtocart', async (req, res, next) => { } // Update cart to the DB - await db.cart.update({ sessionId: req.session.id }, { + await db.cart.updateOne({ sessionId: req.session.id }, { $set: { cart: req.session.cart } }, { upsert: true }); diff --git a/routes/order.js b/routes/order.js index b0ae967..e9237d7 100644 --- a/routes/order.js +++ b/routes/order.js @@ -136,7 +136,7 @@ router.get('/admin/order/delete/:id', restrict, (req, res) => { const db = req.app.db; // remove the order - db.orders.remove({ _id: common.getId(req.params.id) }, {}, (err, numRemoved) => { + db.orders.deleteOne({ _id: common.getId(req.params.id) }, {}, (err, numRemoved) => { if(err){ console.info(err.stack); } @@ -154,7 +154,7 @@ router.get('/admin/order/delete/:id', restrict, (req, res) => { // update order status router.post('/admin/order/statusupdate', restrict, checkAccess, (req, res) => { const db = req.app.db; - db.orders.update({ _id: common.getId(req.body.order_id) }, { $set: { orderStatus: req.body.status } }, { multi: false }, (err, numReplaced) => { + 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); return res.status(400).json({ message: 'Failed to update the order status' }); diff --git a/routes/payments/authorizenet.js b/routes/payments/authorizenet.js index f899f94..580c8e2 100644 --- a/routes/payments/authorizenet.js +++ b/routes/payments/authorizenet.js @@ -76,7 +76,7 @@ router.post('/checkout_action', (req, res, next) => { }; // insert order into DB - db.orders.insert(orderDoc, (err, newDoc) => { + db.orders.insertOne(orderDoc, (err, newDoc) => { if(err){ console.info(err.stack); } diff --git a/routes/payments/paypal.js b/routes/payments/paypal.js index fdf35e0..e57d36c 100644 --- a/routes/payments/paypal.js +++ b/routes/payments/paypal.js @@ -67,7 +67,7 @@ router.get('/checkout_return', (req, res, next) => { } // update the order status - db.orders.update({ _id: common.getId(paymentOrderId) }, { $set: { orderStatus: paymentStatus } }, { multi: false }, (err, numReplaced) => { + db.orders.updateOne({ _id: common.getId(paymentOrderId) }, { $set: { orderStatus: paymentStatus } }, { multi: false }, (err, numReplaced) => { if(err){ console.info(err.stack); } @@ -186,7 +186,7 @@ router.post('/checkout_action', (req, res, next) => { res.redirect(redirectUrl); }else{ // no order ID so we create a new one - db.orders.insert(orderDoc, (err, newDoc) => { + db.orders.insertOne(orderDoc, (err, newDoc) => { if(err){ console.info(err.stack); } diff --git a/routes/payments/stripe.js b/routes/payments/stripe.js index 28203b7..77623e8 100644 --- a/routes/payments/stripe.js +++ b/routes/payments/stripe.js @@ -56,7 +56,7 @@ router.post('/checkout_action', (req, res, next) => { }; // insert order into DB - db.orders.insert(orderDoc, (err, newDoc) => { + db.orders.insertOne(orderDoc, (err, newDoc) => { if(err){ console.info(err.stack); } diff --git a/routes/product.js b/routes/product.js index d892d7b..1fb42c1 100644 --- a/routes/product.js +++ b/routes/product.js @@ -124,7 +124,7 @@ router.post('/admin/product/insert', restrict, checkAccess, async (req, res) => } // Check permalink doesn't already exist - const product = await db.products.count({ productPermalink: req.body.productPermalink }); + const product = await db.products.countDocuments({ productPermalink: req.body.productPermalink }); if(product > 0 && req.body.productPermalink !== ''){ // permalink exits req.session.message = 'Permalink already exists. Pick a new one.'; @@ -239,7 +239,7 @@ router.post('/admin/product/removeoption', restrict, checkAccess, async (req, re delete opts[req.body.optName]; try{ - const updateOption = await db.products.update({ _id: common.getId(req.body.productId) }, { $set: { productOptions: opts } }); + const updateOption = await db.products.updateOne({ _id: common.getId(req.body.productId) }, { $set: { productOptions: opts } }); if(updateOption.result.nModified === 1){ res.status(200).json({ message: 'Option successfully removed' }); return; @@ -273,7 +273,7 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) => res.redirect('/admin/product/edit/' + req.body.productId); return; } - const count = await db.products.count({ productPermalink: req.body.productPermalink, _id: { $ne: common.getId(product._id) } }); + const count = await db.products.countDocuments({ productPermalink: req.body.productPermalink, _id: { $ne: common.getId(product._id) } }); if(count > 0 && req.body.productPermalink !== ''){ // If API request, return json if(req.apiAuthenticated){ @@ -365,7 +365,7 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) => } try{ - await db.products.update({ _id: common.getId(req.body.productId) }, { $set: productDoc }, {}); + await db.products.updateOne({ _id: common.getId(req.body.productId) }, { $set: productDoc }, {}); // Update the index indexProducts(req.app) .then(() => { @@ -398,7 +398,7 @@ router.get('/admin/product/delete/:id', restrict, checkAccess, async (req, res) const db = req.app.db; // remove the product - await db.products.remove({ _id: common.getId(req.params.id) }, {}); + await db.products.deleteOne({ _id: common.getId(req.params.id) }, {}); // delete any images and folder rimraf('public/uploads/' + req.params.id, (err) => { @@ -422,7 +422,7 @@ router.post('/admin/product/published_state', restrict, checkAccess, async (req, const db = req.app.db; try{ - await db.products.update({ _id: common.getId(req.body.id) }, { $set: { productPublished: common.convertBool(req.body.state) } }, { multi: false }); + await db.products.updateOne({ _id: common.getId(req.body.id) }, { $set: { productPublished: common.convertBool(req.body.state) } }, { multi: false }); res.status(200).json('Published state updated'); }catch(ex){ console.error(colors.red('Failed to update the published state: ' + ex)); @@ -436,7 +436,7 @@ router.post('/admin/product/setasmainimage', restrict, checkAccess, async (req, try{ // update the productImage to the db - await db.products.update({ _id: common.getId(req.body.product_id) }, { $set: { productImage: req.body.productImage } }, { multi: false }); + await db.products.updateOne({ _id: common.getId(req.body.product_id) }, { $set: { productImage: req.body.productImage } }, { multi: false }); res.status(200).json({ message: 'Main image successfully set' }); }catch(ex){ res.status(400).json({ message: 'Unable to set as main image. Please try again.' }); @@ -455,7 +455,7 @@ router.post('/admin/product/deleteimage', restrict, checkAccess, async (req, res } if(req.body.productImage === product.productImage){ // set the productImage to null - await db.products.update({ _id: common.getId(req.body.product_id) }, { $set: { productImage: null } }, { multi: false }); + await db.products.updateOne({ _id: common.getId(req.body.product_id) }, { $set: { productImage: null } }, { multi: false }); // remove the image from disk fs.unlink(path.join('public', req.body.productImage), (err) => { diff --git a/routes/user.js b/routes/user.js index 009840a..97d4f8d 100644 --- a/routes/user.js +++ b/routes/user.js @@ -71,7 +71,7 @@ router.get('/admin/user/new', restrict, (req, res) => { router.get('/admin/user/delete/:id', restrict, (req, res) => { const db = req.app.db; if(req.session.isAdmin === true){ - db.users.remove({ _id: common.getId(req.params.id) }, {}, (err, numRemoved) => { + db.users.deleteOne({ _id: common.getId(req.params.id) }, {}, (err, numRemoved) => { if(err){ console.info(err.stack); } @@ -120,7 +120,7 @@ router.post('/admin/user/update', restrict, (req, res) => { updateDoc.userPassword = bcrypt.hashSync(req.body.userPassword); } - db.users.update({ _id: common.getId(req.body.userId) }, + db.users.updateOne({ _id: common.getId(req.body.userId) }, { $set: updateDoc }, { multi: false }, (err, numReplaced) => { @@ -147,7 +147,7 @@ router.post('/admin/user/insert', restrict, (req, res) => { const urlParts = new URL(req.header('Referer')); // Check number of users - db.users.count({}, (err, userCount) => { + db.users.countDocuments({}, (err, userCount) => { let isAdmin = false; // if no users, setup user as admin @@ -173,7 +173,7 @@ router.post('/admin/user/insert', restrict, (req, res) => { return; } // email is ok to be used. - db.users.insert(doc, (err, doc) => { + db.users.insertOne(doc, (err, doc) => { // show the view if(err){ if(doc){ diff --git a/test/test.js b/test/test.js index a18afea..a48f069 100644 --- a/test/test.js +++ b/test/test.js @@ -19,11 +19,11 @@ let request = null; function setup(db){ return Promise.all([ - db.cart.remove({}, {}), - db.users.remove({}, {}), - db.customers.remove({}, {}), - db.products.remove({}, {}), - db.orders.remove({}, {}) + db.cart.deleteMany({}, {}), + db.users.deleteMany({}, {}), + db.customers.deleteMany({}, {}), + db.products.deleteMany({}, {}), + db.orders.deleteMany({}, {}) ]) .then(() => { return Promise.all([ @@ -65,7 +65,7 @@ test.before(async () => { productComment: null }); order.orderDate = new Date(); - await db.orders.insert(order); + await db.orders.insertOne(order); }); // Index everything