home.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. const axios = require("axios");
  2. const bcrypt = require("bcryptjs");
  3. const Merchant = require("../models/merchant");
  4. const Ingredient = require("../models/ingredient");
  5. const nonPosTransaction = require("../models/nonPosTransaction");
  6. const token = "b48068eb-411a-918e-ea64-52007147e42c";
  7. module.exports = {
  8. getIngredients: function(req, res){
  9. Ingredient.find()
  10. .then((ingredients)=>{
  11. return res.json(ingredients);
  12. })
  13. .catch((err)=>{
  14. console.log(err);
  15. return res.render("error");
  16. });
  17. },
  18. createNewIngredients: function(req, res){
  19. Ingredient.create(req.body)
  20. .then((ingredients)=>{
  21. return res.json(ingredients);
  22. })
  23. .catch((err)=>{
  24. console.log(err);
  25. return res.render("error");
  26. });
  27. },
  28. createIngredient: function(req, res){
  29. Ingredient.create(req.body.ingredient)
  30. .then((ingredient)=>{
  31. Merchant.findOne({_id: req.session.user})
  32. .then((merchant)=>{
  33. let item = {
  34. ingredient: ingredient,
  35. quantity: req.body.quantity
  36. }
  37. merchant.inventory.push(item);
  38. merchant.save()
  39. .then((merchant)=>{
  40. console.log("something");
  41. return res.json(item);
  42. })
  43. .catch((err)=>{
  44. console.log(err);
  45. return res.render("error");
  46. });
  47. })
  48. .catch((err)=>{
  49. console.log(err);
  50. return res.render("error");
  51. });
  52. })
  53. .catch((err)=>{
  54. console.log(err);
  55. return res.render("error");
  56. });
  57. },
  58. createTransaction: function(req, res){
  59. let transaction = new nonPosTransaction({
  60. date: Date.now(),
  61. author: "None",
  62. merchant: req.session.user,
  63. recipes: req.body
  64. });
  65. //Calculate all ingredients used, store to list
  66. Merchant.findOne({_id: req.session.user})
  67. .populate("recipes")
  68. .then((merchant)=>{
  69. for(let reqRecipe of req.body){
  70. let merchRecipe = merchant.recipes.find(r => r._id.toString() === reqRecipe.id);
  71. for(let recipeIngredient of merchRecipe.ingredients){
  72. let merchInvIngredient = merchant.inventory.find(i => i.ingredient.toString() === recipeIngredient.ingredient.toString());
  73. merchInvIngredient.quantity -= recipeIngredient.quantity * reqRecipe.quantity;
  74. }
  75. }
  76. merchant.save()
  77. .then((merchant)=>{
  78. res.json(merchant.inventory);
  79. })
  80. .catch((err)=>{
  81. console.log(err);
  82. return res.render("error");
  83. });
  84. })
  85. .catch((err)=>{
  86. console.log(err);
  87. return res.render("error");
  88. });
  89. transaction.save()
  90. .then((transaction)=>{
  91. return;
  92. })
  93. .catch((err)=>{
  94. console.log(err);
  95. return res.render("error");
  96. });
  97. },
  98. getCloverRecipes: function(req, res){
  99. if(!req.session.user){
  100. return res.render("error");
  101. }
  102. Merchant.findOne({_id: req.session.user})
  103. .then((merchant)=>{
  104. axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${merchant.posId}/items?access_token=${token}`)
  105. .then((recipes)=>{
  106. return res.json(recipes);
  107. })
  108. .catch((err)=>{
  109. return res.json(err);
  110. });
  111. })
  112. .catch((err)=>{
  113. console.log(err);
  114. return res.render("error");
  115. });
  116. },
  117. unregistered: function(req, res){
  118. return res.redirect("/");
  119. },
  120. login: function(req, res){
  121. Merchant.findOne({email: req.body.email.toLowerCase()})
  122. .then((merchant)=>{
  123. if(merchant){
  124. bcrypt.compare(req.body.password, merchant.password, (err, result)=>{
  125. if(result){
  126. req.session.user = merchant._id;
  127. return res.redirect("/inventory");
  128. }
  129. });
  130. }else{
  131. req.session.error = {
  132. type: "login",
  133. message: "Invalid email or password"
  134. }
  135. return res.redirect("/");
  136. }
  137. })
  138. .catch((err)=>{
  139. console.log(err);
  140. return res.redirect("/");
  141. });
  142. },
  143. logout: function(req, res){
  144. req.session.user = undefined;
  145. return res.redirect("/");
  146. }
  147. }