Эх сурвалжийг харах

Create error model. Update error handling in renderer.js.

Lee Morgan 6 жил өмнө
parent
commit
eea924a394

+ 2 - 6
controllers/otherData.js

@@ -73,11 +73,7 @@ module.exports = {
                         }
                     });
                 }else{
-                    req.session.error = {
-                        type: "login",
-                        message: "Invalid email or password"
-                    }
-
+                    req.session.error = "Invalid email or password";
                     return res.redirect("/");
                 }
             })
@@ -93,5 +89,5 @@ module.exports = {
         req.session.user = undefined;
 
         return res.redirect("/");
-    }
+    },
 }

+ 90 - 16
controllers/renderer.js

@@ -1,5 +1,6 @@
 const axios = require("axios");
 
+const Error = require("../models/error");
 const Merchant = require("../models/merchant");
 const Ingredient = require("../models/ingredient");
 const Transaction = require("../models/transaction");
@@ -29,6 +30,13 @@ 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();
             return res.redirect("/");
         }
 
@@ -70,28 +78,60 @@ module.exports = {
                             merchant.save()
                                 .then((updatedMerchant)=>{
                                     merchant.password = undefined;
-                                    res.render("inventoryPage/inventory", {merchant: updatedMerchant});
+                                    res.render("inventoryPage/inventory", {merchant: updatedMerchant, error: undefined});
                                     Transaction.create(transactions);
                                     return;
                                 })
                                 .catch((err)=>{
-                                    console.log(err);
-                                    return res.render("error");
+                                    let errorMessage = "There was an error and your transactions could not be updated";
+                                    let error = new Error({
+                                        code: 547,
+                                        displayMessage: errorMessage,
+                                        error: err
+                                    });
+                                    error.save()
+
+                                    merchant.password = undefined;
+                                    return res.render("inventoryPage/inventory", {merchant: updatedMerchant, error: errorMessage});
                                 });
                         })
                         .catch((err)=>{
-                            console.log(err);
+                            let errorMessage = "There was an error and we could not retrieve your transactions from Clover";
+                            let error = new Error({
+                                code: 111,
+                                displayMessage: errorMessage,
+                                error: err
+                            });
+                            error.save()
+
+                            merchant.password = undefined;
+                            return res.render("inventoryPage/inventory", {merchant: merchant, error: errorMessage});
                         });
                 }else if(merchant.pos === "none"){
                     merchant.password = undefined;
-                    return res.render("inventoryPage/inventory", {merchant: merchant})
+                    return res.render("inventoryPage/inventory", {merchant: merchant, error: undefined})
                 }else{
+                    req.session.error = "There was an error and your data could not be retrieved";
+                    let error = new Error({
+                        code: 626,
+                        displayMessage: req.session.error,
+                        error = "merchant.pos did not conform to expectations"
+                    });
+                    error.save();
+
                     return res.redirect("/");
                 }
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                req.session.error = "There was an error and your data could not be retrieved";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: req.session.error,
+                    error: err
+                });
+                error.save();
+
+                return res.redirect("/");
             });
     },
 
@@ -110,13 +150,27 @@ module.exports = {
                         return res.render("merchantSetupPage/merchantSetup", {ingredients: ingredients, recipes: recipes.data});
                     })
                     .catch((err)=>{
-                        console.log(err);
-                        return res.render("error");
+                        req.session.error = "We were unable to retrieve your data from Clover"
+                        let error = new Error({
+                            code: 111,
+                            displayMessage: req.session.error,
+                            error: err
+                        });
+                        error.save();
+
+                        return res.redirect("/");
                     });
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                req.session.error = "Data for new merchants could not be retrieved";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: req.session.error,
+                    error: err
+                });
+                error.save();
+
+                return res.redirect("/");
             });
     },
 
@@ -131,8 +185,13 @@ module.exports = {
                 return res.render("merchantSetupPage/merchantSetup", {ingredients: ingredients, recipes: null});
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                req.session.error = "Data for new merchants could not be retrieved";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: req.session.error,
+                    error: err
+                });
+                error.save();
             });
     },
 
@@ -142,7 +201,15 @@ module.exports = {
     //Renders recipesPage
     displayRecipes: function(req, res){
         if(!req.session.user){
-            return res.render("error");
+            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("/");
         }
 
         Merchant.findOne({_id: req.session.user})
@@ -160,8 +227,15 @@ module.exports = {
                 return res.render("recipesPage/recipes", {merchant: merchant});
             })
             .catch((err)=>{
-                console.log(err);
-                return res.render("error");
+                req.session.error = "There was an error and your data could not be retrieved";
+                let error = new Error({
+                    code: 626,
+                    displayMessage: req.session.error,
+                    error: err
+                });
+                error.save();
+
+                return res.redirect("/");
             });
     }
 }

+ 10 - 0
models/error.js

@@ -0,0 +1,10 @@
+const mongoose = require("mongoose");
+
+const ErrorSchema = new mongoose.Schema({
+    code: Number,
+    date: Date.now(),
+    displayMessage: String,
+    error: {}
+});
+
+module.exports = mongoose.model("Error", ErrorSchema);

+ 9 - 1
views/inventoryPage/controller.js

@@ -4,6 +4,14 @@ let controller = {
     addIngredientStrand: document.querySelector("#addIngredientStrand"),
     enterTransactionsStrand: document.querySelector("#enterTransactionsStrand"),
 
+    onStart: function(){
+        if(error){
+            banner.createError(error);
+        }
+
+        inventoryObj.display();
+    },
+
     clearScreen: function(){
         this.inventoryStrand.style.display = "none";
         this.recipeStrand.style.display = "none";
@@ -12,4 +20,4 @@ let controller = {
     }
 }
 
-inventoryObj.display();
+controller.onStart();

+ 4 - 1
views/inventoryPage/inventory.ejs

@@ -96,7 +96,10 @@
             <button onclick="enterTransactionsObj.submit()">Submit</button>
         </div>
 
-        <script>let merchant = <%- JSON.stringify(merchant) %>;</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>
         <script src="/inventoryPage/inventory.js"></script>

+ 9 - 5
views/landingPage/controller.js

@@ -3,6 +3,14 @@ let controller = {
     loginStrand: document.querySelector("#loginStrand"),
     posChoiceStrand: document.querySelector("#posChoiceStrand"),
 
+    onStart: function(){
+        if(error){
+            banner.createError(error);
+            error = undefined;
+        }
+        publicObj.display();
+    },
+
     clearScreen: function(){
         this.publicStrand.style.display = "none";
         this.loginStrand.style.display = "none";
@@ -10,8 +18,4 @@ let controller = {
     }
 }
 
-if(error){
-    banner.createError(error.message);
-    error = undefined;
-}
-publicObj.display();
+controller.onStart();

+ 5 - 2
views/merchantSetupPage/controller.js

@@ -8,6 +8,10 @@ let controller = {
     nameRecipesStrand: document.querySelector("#nameRecipesStrand"),
     createRecipesStrand: document.querySelector("#createRecipesStrand"),
 
+    onStart: function(){
+        basicInfoObj.display();
+    },
+
     //General purpose data validator
     checkValid: function(valueToCheck, inputField){
         if(!validator.ingredient[valueToCheck](inputField.value, createBanner = false)){
@@ -26,5 +30,4 @@ let controller = {
     }
 }
 
-//Run first function
-basicInfoObj.display();
+controller.onStart();