Преглед на файлове

Add error messages for merchantData.js

Lee Morgan преди 6 години
родител
ревизия
db0ca235b0

+ 241 - 66
controllers/merchantData.js

@@ -1,6 +1,7 @@
 const axios = require("axios");
 const bcrypt = require("bcryptjs");
 
+const Error = require("../models/error");
 const Merchant = require("../models/merchant");
 const Recipe = require("../models/recipe");
 const Ingredient = require("../models/ingredient");
@@ -15,7 +16,8 @@ module.exports = {
     //  count: Number of new recipes
     updateRecipes: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
         }
 
         Merchant.findOne({_id: req.session.user})
@@ -59,8 +61,15 @@ module.exports = {
 
                         Recipe.create(newRecipes)
                             .catch((err)=>{
-                                console.log(err);
-                                return res.render("error");
+                                let errorMessage = "There was an error and your new recipes could not be saved";
+                                let error = new Error({
+                                    code: 547,
+                                    displayMessage: errorMessage,
+                                    error: err
+                                });
+                                error.save();
+
+                                return res.json(errorMessage);
                             });
 
                         merchant.save()
@@ -71,23 +80,51 @@ module.exports = {
                                         return res.json({merchant: newestMerchant, count: result.data.elements.length});
                                     })
                                     .catch((err)=>{
-                                        console.log(err);
-                                        return res.render("error");
+                                        let errorMessage = "Unable to retrieve recipe ingredients";
+                                        let error = new Error({
+                                            code: 626,
+                                            displayMessage: errorMessage,
+                                            error: err
+                                        });
+                                        error.save();
+
+                                        return res.json(errorMessage);
                                     });
                             })
                             .catch((err)=>{
-                                console.log(err);
-                                return res.render("error");
+                                let errorMessage = "Unable to save changes from Clover";
+                                let error = new Error({
+                                    code: 547,
+                                    displayMessage: errorMessage,
+                                    error: err
+                                });
+                                error.save();
+
+                                return res.json(errorMessage);
                             });
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        let errorMessage = "Unable to retrieve data from Clover";
+                        let error = new Error({
+                            code: 111,
+                            displayMessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
+
+                        return res.json(errorMessage);
                     });
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "Unable to retrieve merchant data";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return res.json(errorMessage);
             });
     },
 
@@ -100,7 +137,8 @@ module.exports = {
         data.email = data.email.toLowerCase();
 
         if(data.password.length < 15 || data.password !== data.confirmPassword){
-            return res.render("error");
+            req.session.error = "Passwords must match and contain at least 15 characters";
+            return res.redirect("/");
         }
 
         axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${req.session.posId}?access_token=${token}`)
@@ -141,17 +179,39 @@ module.exports = {
                                 return res.redirect("/inventory");
                             })
                             .catch((err)=>{
-                                console.log(err);
-                                return res.render("error");
+                                let errorMessage = "There was an error and your account could not be created";
+                                let error = new Error({
+                                    code: 547,
+                                    displayMessage: errorMessage,
+                                    error: err
+                                });
+                                error.save();
+
+                                return;
                             });
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        let errorMessage = "There was an error and your recipes could not be saved";
+                        let error = new Error({
+                            code: 547,
+                            displaymessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
+
+                        return;
                     });
             })
             .catch((err)=>{
-                console.log(err);
+                let errorMessage = "Unable to retrieve your data from Clover";
+                let error = new Error({
+                    code: 111,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return;
             });
     },
 
@@ -196,13 +256,27 @@ module.exports = {
                         return res.redirect("/inventory");
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        let errorMessage = "There was an error and your account could not be created";
+                        let error = new Error({
+                            code: 547,
+                            displayMessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
+
+                        return;
                     });
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "There was an error while trying to save your recipes";
+                let error = new Error({
+                    code: 547,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return;
             });
     },
 
@@ -213,7 +287,8 @@ module.exports = {
     //  ingredient: Newly added ingredient
     addMerchantIngredient: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
         }
 
         Merchant.findOne({_id: req.session.user})
@@ -221,23 +296,47 @@ module.exports = {
                 merchant.inventory.push(req.body);
                 merchant.save()
                     .then((newMerchant)=>{
-                        Ingredient.findOne({_id: req.body.ingredient})
-                            .then((ingredient)=>{
-                                return res.json(ingredient);
-                            })
-                            .catch((err)=>{
-                                console.log(err);
-                                return res.render("error");
-                            });
+                        newMerchant.populate("inventory.ingredient", (err)=>{
+                            if(err){
+                                let errorMessage = "Ingredient updated, page refresh required to display";
+                                let error = new Error({
+                                    code: 626,
+                                    displayMessage: errorMessage,
+                                    error: err
+                                });
+                                error.save();
+
+                                return res.json(errorMessage);
+                            }else{
+                                let newIngredient = newMerchant.inventory.find(i => i.ingredient._id.toString() === req.body.ingredient);
+                                return res.json(newIngredient);
+                            }
+                        });
                     })
                     .catch((err)=>{
+                        let errorMessage = "Unable to save new ingredient";
+                        let error = new Error({
+                            code: 547,
+                            displayMessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
                         console.log(err);
-                        return res.render("error");
+
+                        return res.json(errorMessage);
                     });
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "Unable to retrieve merchant data";
+                let error = new Error({
+                    code: 547,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+                console.log("error2");
+
+                return res.json(errorMessage);
             });
     },
 
@@ -247,7 +346,8 @@ module.exports = {
     //Returns: Nothing
     removeMerchantIngredient: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
         }
 
         Merchant.findOne({_id: req.session.user})
@@ -260,17 +360,31 @@ module.exports = {
                 }
 
                 merchant.save()
-                    .then(()=>{
-                        return res.json();
+                    .then((merchant)=>{
+                        return res.json(req.body);
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        let errorMessage = "Unable to update ingredients";
+                        let error = new Error({
+                            code: 547,
+                            displayMessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
+
+                        return res.json(errorMessage);
                     });
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "Unable to retrieve merchant data";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return res.json(errorMessage);
             });
     },
 
@@ -281,7 +395,8 @@ module.exports = {
     //Returns: Nothing
     updateMerchantIngredient: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
         }
 
         Merchant.findOne({_id: req.session.user})
@@ -290,16 +405,30 @@ module.exports = {
                 updateIngredient.quantity += req.body.quantityChange;
                 merchant.save()
                     .then((merchant)=>{
-                        res.json();
+                        res.json(req.body.quantityChange);
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        let errorMessage = "There was an error and your data could not be saved";
+                        let error = new Error({
+                            code: 547,
+                            displayMessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
+
+                        return res.json(errorMessage);
                     })
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "There was an error and we could not retrieve your data";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return res.json(errorMessage);
             });
 
         let invAdj = new InventoryAdjustment({
@@ -310,12 +439,13 @@ module.exports = {
         });
 
         invAdj.save()
-            .then((newAdjustment)=>{
-                return;
-            })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let error = new Error({
+                    code: 547,
+                    displayMessage: "none",
+                    error: err
+                });
+                error.save();
             });
     },
 
@@ -326,7 +456,8 @@ module.exports = {
     //Returns: Nothing
     addRecipeIngredient: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
         }
 
         Recipe.findOne({_id: req.body.recipeId})
@@ -341,13 +472,27 @@ module.exports = {
                         return res.json();
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        let errorMessage = "There was an error and the recipe could not be updated";
+                        let error = new Error({
+                            code: 547,
+                            displayMessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
+
+                        return res.json(errorMessage);
                     });
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "There was an error and the recipe could not be updated"
+                let error = new Error({
+                    code: 626,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return res.json(errorMessage);
             });
     },
 
@@ -358,7 +503,8 @@ module.exports = {
     //Returns: Nothing
     updateRecipeIngredient: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
         }
 
         Recipe.findOne({_id: req.body.recipeId})
@@ -371,15 +517,29 @@ module.exports = {
                                 return res.json();
                             })
                             .catch((err)=>{
-                                console.log(err);
-                                return res.render("error");
+                                let errorMessage = "There was an error and the recipe could not be updated";
+                                let error = new Error({
+                                    code: 547,
+                                    displayMessage: errorMessage,
+                                    error: err
+                                });
+                                error.save();
+                
+                                return res.json(errorMessage);
                             });
                     }
                 }
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "There was an error and the recipe could not be updated";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return res.json(errorMessage);
             });
     },
 
@@ -390,7 +550,8 @@ module.exports = {
     //Returns: Nothing
     removeRecipeIngredient: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
         }
 
         Recipe.findOne({_id: req.body.recipeId})
@@ -406,13 +567,27 @@ module.exports = {
                         return res.json();
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        let errorMessage = "There was an error and the ingredient could not be remove from the recipe";
+                        let error = new Error({
+                            code: 547,
+                            displayMessage: errorMessage,
+                            error: err
+                        });
+                        error.save();
+        
+                        return res.json(errorMessage);
                     });
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                let errorMessage = "There was an error and the ingredient could not be removed from the recipe";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: errorMessage,
+                    error: err
+                });
+                error.save();
+
+                return res.json(errorMessage);
             });
     },
 }

+ 2 - 15
controllers/renderer.js

@@ -30,13 +30,7 @@ module.exports = {
     //Renders inventoryPage
     displayInventory: function(req, res){
         if(!req.session.user){
-            req.session.error = "You must logged in to view that page"
-            let error = new Error({
-                code: 953,
-                displayMessage: req.session.error,
-                error: "User not logged in"
-            });
-            error.save();
+            req.session.error = "You must logged in to view that page";
             return res.redirect("/");
         }
 
@@ -115,7 +109,7 @@ module.exports = {
                     let error = new Error({
                         code: 626,
                         displayMessage: req.session.error,
-                        error = "merchant.pos did not conform to expectations"
+                        error: "merchant.pos did not conform to expectations"
                     });
                     error.save();
 
@@ -202,13 +196,6 @@ module.exports = {
     displayRecipes: function(req, res){
         if(!req.session.user){
             req.session.error = "You must be logged in to view that page";
-            let error = new Error({
-                code: 549,
-                displayMessage: req.session.error,
-                error: "User not logged in"
-            });
-            error.save();
-
             return res.redirect("/");
         }
 

+ 4 - 1
models/error.js

@@ -2,7 +2,10 @@ const mongoose = require("mongoose");
 
 const ErrorSchema = new mongoose.Schema({
     code: Number,
-    date: Date.now(),
+    date: {
+        type: Date,
+        default: Date.now
+    },
     displayMessage: String,
     error: {}
 });

+ 7 - 4
views/inventoryPage/addIngredient.js

@@ -39,11 +39,14 @@ let addIngredientObj = {
         if(validator.ingredient.quantity){
             axios.post("/merchant/ingredients/create", item)
                 .then((ingredient)=>{
-                    item.ingredient = ingredient.data;
-                    merchant.inventory.push(item);
+                    if(typeof(ingredient.data) === "string"){
+                        banner.createError(ingredient.data);
+                    }else{
+                        merchant.inventory.push(ingredient.data);
 
-                    inventoryObj.display();
-                    inventoryObj.filter();
+                        inventoryObj.display();
+                        inventoryObj.filter();
+                    }
                 })
                 .catch((err)=>{
                     banner.createError("Something went wrong and the ingredient could not be added");

+ 7 - 1
views/inventoryPage/inventory.ejs

@@ -96,9 +96,15 @@
             <button onclick="enterTransactionsObj.submit()">Submit</button>
         </div>
 
+        <script>
+                <% if(locals.error){ %>
+                    let error = <%- JSON.stringify(error) %>;
+                <% }else{ %>
+                    let error = undefined;
+                <% } %>
+        </script>
         <script>
             let merchant = <%- JSON.stringify(merchant) %>;
-            let error = <%- JSON.stringify(error) %>;
         </script>
         <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
         <script src="../shared/validation.js"></script>

+ 19 - 12
views/inventoryPage/inventory.js

@@ -121,15 +121,18 @@ let inventoryObj = {
             let updateIngredient = merchant.inventory.find(i => i._id === id);
             updateIngredient.quantity = quantity;
             axios.post("/merchant/ingredients/update", {ingredientId: id, quantityChange: quantity - originalQuantity})
-                .then((merchant)=>{
-                    banner.createNotification("The ingredient has been successfully updated");
+                .then((response)=>{
+                    if(typeof(response.data) === "string"){
+                        banner.createError(response.data);
+                    }else{
+                        banner.createNotification("The ingredient has been successfully updated");
+                        quantityField.innerText = quantity;
+                    }
                 })
                 .catch((err)=>{
                     banner.createError("There was an error and the ingredient was not updated");
                     console.log(err);
                 });
-
-            quantityField.innerText = quantity;
         }else{
             quantityField.innerText = originalQuantity;
         }
@@ -141,17 +144,21 @@ let inventoryObj = {
     //Delete an ingredient from both the page and the database
     removeIngredient: function(id, row){
         axios.post("/merchant/ingredients/remove", {ingredientId: id})
-            .then(()=>{
-                for(let i = 0; i < merchant.inventory.length; i++){
-                    if(id === merchant.inventory[i]._id){
-                        merchant.inventory.splice(i, 1);
-                        break;
+            .then((result)=>{
+                if(typeof(result.data) === "string"){
+                    banner.createError(result.data);
+                }else{
+                    for(let i = 0; i < merchant.inventory.length; i++){
+                        if(id === merchant.inventory[i]._id){
+                            merchant.inventory.splice(i, 1);
+                            break;
+                        }
                     }
-                }
 
-                row.parentNode.removeChild(row);
+                    row.parentNode.removeChild(row);
 
-                banner.createNotification("The ingredient has been removed from your inventory");
+                    banner.createNotification("The ingredient has been removed from your inventory");
+                }
             })
             .catch((err)=>{
                 banner.createError("There was an error and the ingredient has not been removed from your inventory");

+ 1 - 1
views/landingPage/controller.js

@@ -6,8 +6,8 @@ let controller = {
     onStart: function(){
         if(error){
             banner.createError(error);
-            error = undefined;
         }
+        
         publicObj.display();
     },
 

+ 7 - 1
views/landingPage/landing.ejs

@@ -42,7 +42,13 @@
             </div>
         </div>
 
-        <script>let error = <%- JSON.stringify(error) %>;</script>
+        <script>
+                <% if(locals.error){ %>
+                    let error = <%- JSON.stringify(error) %>;
+                <% }else{ %>
+                    let error = undefined;
+                <% } %>
+        </script>
         <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
         <script src="../shared/validation.js"></script>
         <script src="/landingPage/public.js"></script>

+ 1 - 3
views/merchantSetupPage/createRecipes.js

@@ -175,6 +175,4 @@ let createRecipesObj = {
         document.body.appendChild(form);
         form.submit();
     }
-}
-
-previous
+}

+ 9 - 5
views/recipesPage/recipes.js

@@ -48,11 +48,15 @@ let recipesObj = {
     updateRecipes: function(){
         axios.get("/merchant/recipes/update")
             .then((result)=>{
-                merchant = result.data.merchant;
-                this.populateRecipes();
-                banner.createNotification("Your recipes have been updated successfully");
-                if(result.data.count > 0){
-                    banner.createError(`You have ${result.data.count} recipes with no ingredients.  Please update them.`);
+                if(typeof(result.data) === "string"){
+                    banner.createError(result.data);
+                }else{
+                    merchant = result.data.merchant;
+                    this.populateRecipes();
+                    banner.createNotification("Your recipes have been updated successfully");
+                    if(result.data.count > 0){
+                        banner.createError(`You have ${result.data.count} recipes with no ingredients.  Please update them.`);
+                    }
                 }
             })
             .catch((err)=>{

+ 48 - 36
views/recipesPage/singleRecipe.js

@@ -81,39 +81,43 @@ let singleRecipeObj = {
         
         axios.post("/merchant/recipes/ingredients/create", {recipeId: recipe._id, item: item})
             .then((newMerchant)=>{
-                let addIngredient = merchant.inventory.find(i => i.ingredient._id === ingredientId);
-                recipe.ingredients.push({
-                    ingredient: addIngredient.ingredient,
-                    quantity: item.quantity
-                });
-
-                //Change row from displaying options to showing default display
-                while(row.children.length > 0){
-                    row.removeChild(row.firstChild);
+                if(typeof(newMerchant.data) === "string"){
+                    banner.createError(newMerchant.data);
+                }else{
+                    let addIngredient = merchant.inventory.find(i => i.ingredient._id === ingredientId);
+                    recipe.ingredients.push({
+                        ingredient: addIngredient.ingredient,
+                        quantity: item.quantity
+                    });
+
+                    //Change row from displaying options to showing default display
+                    while(row.children.length > 0){
+                        row.removeChild(row.firstChild);
+                    }
+
+                    let name = document.createElement("td");
+                    name.innerText = addIngredient.ingredient.name;
+                    row.appendChild(name);
+
+                    let quantity = document.createElement("td");
+                    quantity.innerText = `${item.quantity} ${addIngredient.ingredient.unit}`;
+                    row.appendChild(quantity);
+
+                    let actions = document.createElement("td");
+                    row.appendChild(actions);
+
+                    let editButton = document.createElement("button");
+                    editButton.innerText = "Edit";
+                    editButton.onclick = ()=>{this.editIngredient(row, addIngredient, recipe);};
+                    actions.appendChild(editButton);
+
+                    let removeButton = document.createElement("button");
+                    removeButton.innerText = "Remove";
+                    removeButton.onclick = ()=>{this.deleteIngredient(recipe._id, ingredientId, row);};
+                    actions.appendChild(removeButton);
+
+                    banner.createNotification("Ingredient successfully added to database");
                 }
-
-                let name = document.createElement("td");
-                name.innerText = addIngredient.ingredient.name;
-                row.appendChild(name);
-
-                let quantity = document.createElement("td");
-                quantity.innerText = `${item.quantity} ${addIngredient.ingredient.unit}`;
-                row.appendChild(quantity);
-
-                let actions = document.createElement("td");
-                row.appendChild(actions);
-
-                let editButton = document.createElement("button");
-                editButton.innerText = "Edit";
-                editButton.onclick = ()=>{this.editIngredient(row, addIngredient, recipe);};
-                actions.appendChild(editButton);
-
-                let removeButton = document.createElement("button");
-                removeButton.innerText = "Remove";
-                removeButton.onclick = ()=>{this.deleteIngredient(recipe._id, ingredientId, row);};
-                actions.appendChild(removeButton);
-
-                banner.createNotification("Ingredient successfully added to database");
             })
             .catch((err)=>{
                 row.parentNode.removeChild(row);
@@ -136,7 +140,11 @@ let singleRecipeObj = {
         
         axios.post("/merchant/recipes/ingredients/remove", {ingredientId: ingredientId, recipeId: recipeId})
             .then((result)=>{
-                banner.createNotification("Ingredient has been removed from recipe");
+                if(typeof(result.data) === "string"){
+                    banner.createError(result.data);
+                }else{
+                    banner.createNotification("Ingredient has been removed from recipe");
+                }
             })
             .catch((err)=>{
                 banner.createError("There was an error and the ingredient could not be removed from the recipe");
@@ -178,9 +186,13 @@ let singleRecipeObj = {
         button.onclick = ()=>{this.editIngredient(row, ingredient);};
 
         axios.post("/merchant/recipes/ingredients/update", {recipeId: recipe._id, ingredient: ingredient})
-            .then(()=>{
-                td.innerText = `${ingredient.quantity} ${ingredient.ingredient.unit}`;
-                banner.createNotification("Ingredient successfully updated");
+            .then((result)=>{
+                if(typeof(result.data) === "string"){
+                    banner.createError(result.data);
+                }else{
+                    td.innerText = `${ingredient.quantity} ${ingredient.ingredient.unit}`;
+                    banner.createNotification("Ingredient successfully updated");
+                }
             })
             .catch((err)=>{
                 td.innerText = `${originalQuantity} ${ingredient.ingredient.unit}`;