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

Add ability to update clover recipes

Lee Morgan преди 6 години
родител
ревизия
ff30c6c0b4
променени са 4 файла, в които са добавени 124 реда и са изтрити 0 реда
  1. 82 0
      controllers/recipeData.js
  2. 1 0
      routes.js
  3. 2 0
      views/dashboardPage/dashboard.ejs
  4. 39 0
      views/dashboardPage/recipeBook.js

+ 82 - 0
controllers/recipeData.js

@@ -3,6 +3,8 @@ const Merchant = require("../models/merchant.js");
 const RecipeChange = require("../models/recipeChange.js");
 const Validator = require("./validator.js");
 
+const axios = require("axios");
+
 module.exports = {
     /*
     POST - creates a single new recipe
@@ -144,5 +146,85 @@ module.exports = {
             .catch((err)=>{
                 return res.json("ERROR: UNABLE TO UPDATE RECIPE");
             });
+    },
+
+    //GET - Checks clover for new or deleted recipes
+    //Returns: 
+    //  merchant: Full merchant (recipe ingredients populated)
+    //  count: Number of new recipes
+    updateRecipesClover: function(req, res){
+        if(!req.session.user){
+            req.session.error = "Must be logged in to do that";
+            return res.redirect("/");
+        }
+
+        Merchant.find({_id: req.session.user})
+            .populate("recipes")
+            .then((response)=>{
+                merchant = response[0];
+                axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${merchant.posId}/items?access_token=${merchant.posAccessToken}`)
+                    .then((result)=>{
+                        let deletedRecipes = merchant.recipes.slice();
+                        for(let i = 0; i < result.data.elements.length; i++){
+                            for(let j = 0; j < deletedRecipes.length; j++){
+                                if(result.data.elements[i].id === deletedRecipes[j].posId){
+                                    result.data.elements.splice(i, 1);
+                                    deletedRecipes.splice(j, 1);
+                                    i--;
+                                    break;
+                                }
+                            }
+                        }
+
+                        for(let recipe of deletedRecipes){
+                            for(let i = 0; i < merchant.recipes.length; i++){
+                                if(recipe._id === merchant.recipes[i]._id){
+                                    merchant.recipes.splice(i, 1);
+                                    break;
+                                }
+                            }
+                        }
+
+                        let newRecipes = []
+                        for(let recipe of result.data.elements){
+                            let newRecipe = new Recipe({
+                                posId: recipe.id,
+                                merchant: merchant._id,
+                                name: recipe.name,
+                                ingredients: [],
+                                price: recipe.price
+                            });
+
+                            merchant.recipes.push(newRecipe);
+                            newRecipes.push(newRecipe);
+                        }
+
+                        Recipe.create(newRecipes)
+                            .catch((err)=>{
+                                return res.json("ERROR: UNABLE TO SAVE RECIPES");
+                            });
+
+                        merchant.save()
+                            .then((newMerchant)=>{
+                                newMerchant.populate("recipes.ingredients.ingredient").execPopulate()
+                                    .then((newestMerchant)=>{
+                                        merchant.password = undefined;
+                                        return res.json({new: newRecipes, removed: deletedRecipes});
+                                    })
+                                    .catch((err)=>{
+                                        return res.json("ERROR: UNABLE TO RETRIEVE DATA");
+                                    });
+                            })
+                            .catch((err)=>{
+                                return res.json("ERROR: UNABLE TO SAVE CHANGES FROM CLOVER");
+                            });
+                    })
+                    .catch((err)=>{
+                        return res.json("ERROR: UNABLE TO RETRIEVE DATA FROM CLOVER");
+                    });
+            })
+            .catch((err)=>{
+                return res.json("ERROR: UNABLE TO RETRIEVE MERCHANT DATA");
+            });
     }
 }

+ 1 - 0
routes.js

@@ -29,6 +29,7 @@ module.exports = function(app){
     //Recipes
     app.post("/recipe/create", recipeData.createRecipe);
     app.put("/recipe/update", recipeData.updateRecipe);
+    app.get("/recipe/update/clover", recipeData.updateRecipesClover);
 
     //Orders
     app.get("/order", orderData.getOrders);

+ 2 - 0
views/dashboardPage/dashboard.ejs

@@ -213,6 +213,8 @@
 
                     <% if(merchant.pos === "none"){ %>
                         <button class="button mobileHide" onclick="newRecipeComp.display()">NEW</button>
+                    <% }else if(merchant.pos === "clover"){ %>
+                        <button class="button mobileHide" onclick="recipeBookStrandObj.posUpdate()">UPDATE</button>
                     <% } %>
                 </div>
 

+ 39 - 0
views/dashboardPage/recipeBook.js

@@ -61,5 +61,44 @@ window.recipeBookStrandObj = {
     clearSorting: function(){
         document.getElementById("recipeSearch").value = "";
         this.search();
+    },
+
+    posUpdate: function(){
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/recipe/update/clover", {
+            method: "GET",
+            headers: {
+                "Content-Type": "application/json;charset=utf-8"
+            },
+        })
+            .then(response => response.json())
+            .then((response)=>{
+                for(let i = 0; i < response.new.length; i++){
+                    merchant.editRecipe(new Recipe(
+                        response.new[i]._id,
+                        response.new[i].name,
+                        response.new[i].price,
+                        merchant,
+                        []
+                    ));
+                }
+
+                for(let i = 0; i < response.removed.length; i++){
+                    for(let j = 0; j < merchant.recipes.length; j++){
+                        if(response.removed[i]._id === merchant.recipes[j].id){
+                            merchant.editRecipe(merchant.recipes[j], true);
+                            break;
+                        }
+                    }
+                }
+            })
+            .catch((err)=>{
+                banner.createError("SOMETHING WENT WRONG.  PLEASE REFRESH THE PAGE");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 }