orderData.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. const Order = require("../models/order.js");
  2. const Merchant = require("../models/merchant.js");
  3. const ObjectId = require("mongoose").Types.ObjectId;
  4. const Validator = require("./validator.js");
  5. module.exports = {
  6. /*
  7. GET - get the 25 most recent orders
  8. return = [
  9. _id: id of order,
  10. name: user created id for order,
  11. date: date order was created,
  12. ingredients: [{
  13. _id: unused id of this object,
  14. ingredient: id of the ingredient,
  15. price: price per unit of the ingredient,
  16. quantity: quantity of ingredient in this order
  17. }]
  18. ]
  19. */
  20. getOrders: function(req, res){
  21. if(!req.session.user){
  22. req.session.error = "MUST BE LOGGED IN TO DO THAT";
  23. return res.redirect("/");
  24. }
  25. Order.aggregate([
  26. {$match: {merchant: ObjectId(req.session.user)}},
  27. {$sort: {date: -1}},
  28. {$limit: 25},
  29. {$project: {
  30. name: 1,
  31. date: 1,
  32. ingredients: 1
  33. }}
  34. ])
  35. .then((orders)=>{
  36. return res.json(orders);
  37. })
  38. .catch((err)=>{
  39. return res.json("ERROR: UNABLE TO RETRIEVE YOUR ORDERS");
  40. });
  41. },
  42. /*
  43. POST - retrieves a list of transactions based on the filter
  44. req.body = {
  45. startDate: starting date to filter on,
  46. endDate: ending date to filter on,
  47. ingredients: list of recipes.to filter on
  48. }
  49. */
  50. orderFilter: function(req, res){
  51. if(!req.session.user){
  52. req.session.error = "MUST BE LOGGED IN TO DO THAT";
  53. return res.redirect("/");
  54. }
  55. let objectifiedIngredients = [];
  56. for(let i = 0; i < req.body.ingredients.length; i++){
  57. objectifiedIngredients.push(new ObjectId(req.body.ingredients[i]));
  58. }
  59. let startDate = new Date(req.body.startDate);
  60. let endDate = new Date(req.body.endDate);
  61. endDate = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate() + 1);
  62. Order.aggregate([
  63. {$match: {
  64. merchant: new ObjectId(req.session.user),
  65. date: {
  66. $gte: startDate,
  67. $lt: endDate
  68. },
  69. ingredients: {
  70. $elemMatch: {
  71. ingredient: {
  72. $in: objectifiedIngredients
  73. }
  74. }
  75. }
  76. }},
  77. {$sort: {date: 1}}
  78. ])
  79. .then((orders)=>{
  80. return res.json(orders);
  81. })
  82. .catch((err)=>{
  83. return res.json("ERROR: UNABLE TO RETRIEVE YOUR TRANSACTIONS");
  84. });
  85. },
  86. /*
  87. POST - Creates a new order from the site
  88. req.body = {
  89. name: user created order id
  90. date: creation date
  91. ingredients: [{
  92. ingredient: id of the ingredient
  93. quantity: amount of the ingredient purchased
  94. price: price per unit for ingredient
  95. }]
  96. }
  97. */
  98. createOrder: function(req, res){
  99. if(!req.session.user){
  100. req.session.error = "MUST BE LOGGED IN TO DO THAT";
  101. return res.redirect("/");
  102. }
  103. let validation = Validator.order(req.body);
  104. if(validation !== true){
  105. return res.json(validation);
  106. }
  107. let newOrder = new Order(req.body);
  108. newOrder.merchant = req.session.user;
  109. newOrder.save()
  110. .then((response)=>{
  111. res.json(response);
  112. })
  113. .catch((err)=>{
  114. return res.json("ERROR: UNABLE TO SAVE ORDER");
  115. });
  116. Merchant.findOne({_id: req.session.user})
  117. .then((merchant)=>{
  118. for(let i = 0; i < req.body.ingredients.length; i++){
  119. for(let j = 0; j < merchant.inventory.length; j++){
  120. if(req.body.ingredients[i].ingredient === merchant.inventory[j].ingredient.toString()){
  121. merchant.inventory[j].quantity += parseFloat(req.body.ingredients[i].quantity);
  122. }
  123. }
  124. }
  125. return merchant.save()
  126. })
  127. .then((merchant)=>{
  128. return;
  129. })
  130. .catch(()=>{});
  131. },
  132. /*
  133. DELETE - Remove an order from the database
  134. */
  135. removeOrder: function(req, res){
  136. if(!req.session.user){
  137. req.session.error = "MUST BE LOGGED IN TO DO THAT";
  138. return res.redirect("/");
  139. }
  140. Order.deleteOne({_id: req.params.id})
  141. .then((response)=>{
  142. return res.json({});
  143. })
  144. .catch((err)=>{
  145. return res.json("ERROR: UNABLE TO REMOVE ORDER");
  146. });
  147. }
  148. }