orderData.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. const Order = require("../models/order.js");
  2. const Merchant = require("../models/merchant.js");
  3. const ObjectId = require("mongoose").Types.ObjectId;
  4. module.exports = {
  5. /*
  6. GET - get the 25 most recent orders
  7. return = [
  8. _id: id of order,
  9. orderId: user created id for order,
  10. date: date order was created,
  11. ingredients: [{
  12. _id: unused id of this object,
  13. ingredient: id of the ingredient,
  14. price: price per unit of the ingredient,
  15. quantity: quantity of ingredient in this order
  16. }]
  17. ]
  18. */
  19. getOrders: function(req, res){
  20. if(!req.session.user){
  21. req.session.error = "Must be logged in to do that";
  22. return res.redirect("/");
  23. }
  24. Order.aggregate([
  25. {$match: {merchant: ObjectId(req.session.user)}},
  26. {$sort: {date: -1}},
  27. {$limit: 25},
  28. {$project: {
  29. orderId: 1,
  30. date: 1,
  31. ingredients: 1
  32. }}
  33. ])
  34. .then((orders)=>{
  35. return res.json(orders);
  36. })
  37. .catch((err)=>{
  38. return res.json("Error: unable to retrieve your orders");
  39. });
  40. },
  41. /*
  42. POST - Creates a new order from the site
  43. req.body = {
  44. orderId: user created order id
  45. date: creation date
  46. ingredients: [{
  47. ingredient: id of the ingredient
  48. quantity: amount of the ingredient purchased
  49. price: price per unit for ingredient
  50. }]
  51. }
  52. */
  53. createOrder: function(req, res){
  54. if(!req.session.user){
  55. req.session.error = "Must be logged in to do that";
  56. return res.redirect("/");
  57. }
  58. let validation = Validator.order(req.body);
  59. if(validation !== true){
  60. return res.json(validation);
  61. }
  62. let newOrder = new Order(req.body);
  63. newOrder.merchant = req.session.user;
  64. newOrder.save()
  65. .then((response)=>{
  66. res.json(response);
  67. })
  68. .catch((err)=>{
  69. return res.json("Error: unable to save the new order");
  70. });
  71. Merchant.findOne({_id: req.session.user})
  72. .then((merchant)=>{
  73. for(let i = 0; i < req.body.ingredients.length; i++){
  74. for(let j = 0; j < merchant.inventory.length; j++){
  75. if(req.body.ingredients[i].ingredient === merchant.inventory[j].ingredient.toString()){
  76. merchant.inventory[j].quantity += parseFloat(req.body.ingredients[i].quantity);
  77. }
  78. }
  79. }
  80. return merchant.save()
  81. })
  82. .then((merchant)=>{
  83. return;
  84. })
  85. .catch(()=>{});
  86. },
  87. /*
  88. DELETE - Remove an order from the database
  89. */
  90. removeOrder: function(req, res){
  91. if(!req.session.user){
  92. req.session.error = "Must be logged in to do that";
  93. return res.redirect("/");
  94. }
  95. Order.deleteOne({_id: req.params.id})
  96. .then((response)=>{
  97. return res.json({});
  98. })
  99. .catch((err)=>{
  100. return res.json("Error: unable to delete the order");
  101. });
  102. }
  103. }