otherData.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. const bcrypt = require("bcryptjs");
  2. const Error = require("../models/error");
  3. const NonPosTransaction = require("../models/nonPosTransaction");
  4. const Merchant = require("../models/merchant");
  5. module.exports = {
  6. //POST - Update non-pos merchant inventory and create a transaction
  7. //Inputs:
  8. // recipesSold: list of recipes sold and how much (recipe._id and quantity)
  9. //Returns:
  10. // merchant.inventory: entire merchant inventory after being updated
  11. createTransaction: function(req, res){
  12. if(!req.session.user){
  13. res.session.error = "Must be logged in to do that";
  14. return res.redirect("/");
  15. }
  16. let transaction = new NonPosTransaction({
  17. date: Date.now(),
  18. author: "None",
  19. merchant: req.session.user,
  20. recipes: req.body
  21. });
  22. //Calculate all ingredients used, store to list
  23. Merchant.findOne({_id: req.session.user})
  24. .populate("recipes")
  25. .then((merchant)=>{
  26. for(let reqRecipe of req.body){
  27. let merchRecipe = merchant.recipes.find(r => r._id.toString() === reqRecipe.id);
  28. for(let recipeIngredient of merchRecipe.ingredients){
  29. let merchInvIngredient = merchant.inventory.find(i => i.ingredient.toString() === recipeIngredient.ingredient.toString());
  30. merchInvIngredient.quantity -= recipeIngredient.quantity * reqRecipe.quantity;
  31. }
  32. }
  33. merchant.save()
  34. .then((merchant)=>{
  35. res.json(merchant.inventory);
  36. })
  37. .catch((err)=>{
  38. let errorMessage = "There was an error and your transactions could not be saved";
  39. let error = new Error({
  40. code: 547,
  41. displayMessage: errorMessage,
  42. error: err
  43. });
  44. error.save();
  45. return res.json(errorMessage);
  46. });
  47. })
  48. .catch((err)=>{
  49. let errorMessage = "There was an error and your data could not be retrieved";
  50. let error = new Error({
  51. code: 626,
  52. displayMessage: errorMessage,
  53. error: err
  54. });
  55. error.save();
  56. return res.json(errorMessage);
  57. });
  58. transaction.save()
  59. .then((transaction)=>{
  60. return;
  61. })
  62. .catch((err)=>{
  63. let error = new Error({
  64. code: 120,
  65. displayMessage: "none",
  66. error: err
  67. });
  68. error.save();
  69. });
  70. },
  71. //POST - logs the user in
  72. //Inputs:
  73. // req.body.email
  74. // req.body.password
  75. //Redirects to "/inventory" on success
  76. login: function(req, res){
  77. Merchant.findOne({email: req.body.email.toLowerCase()})
  78. .then((merchant)=>{
  79. if(merchant){
  80. bcrypt.compare(req.body.password, merchant.password, (err, result)=>{
  81. if(result){
  82. req.session.user = merchant._id;
  83. return res.redirect("/inventory");
  84. }else{
  85. req.session.error = "Invalid email or password";
  86. return res.redirect("/");
  87. }
  88. });
  89. }else{
  90. req.session.error = "Invalid email or password";
  91. return res.redirect("/");
  92. }
  93. })
  94. .catch((err)=>{
  95. req.session.error = "There was an error and your data could not be retrieved";
  96. let error = new Error({
  97. code: 626,
  98. displayMessage: req.session.error,
  99. error: err
  100. });
  101. error.save();
  102. return res.redirect("/");
  103. });
  104. },
  105. //GET - logs the user out
  106. //Redirects to "/"
  107. logout: function(req, res){
  108. req.session.user = undefined;
  109. return res.redirect("/");
  110. },
  111. //POST - check an email for uniqueness
  112. //
  113. checkUniqueEmail: function(req, res){
  114. Merchant.findOne({email: req.body.email})
  115. .then((merchant)=>{
  116. if(merchant){
  117. return res.json(false);
  118. }else{
  119. return res.json(true);
  120. }
  121. })
  122. .catch((err)=>{
  123. let errorMessage = "Error: unable to validate email address";
  124. let error = new Error({
  125. code: 626,
  126. displayMessage: errorMessage,
  127. error: err
  128. });
  129. error.save();
  130. return res.json(errorMessage);
  131. });
  132. }
  133. }