orderData.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 newOrder = new Order(req.body);
  59. newOrder.merchant = req.session.user;
  60. newOrder.save()
  61. .then((response)=>{
  62. res.json(response);
  63. })
  64. .catch((err)=>{
  65. return res.json("Error: unable to save the new order");
  66. });
  67. Merchant.findOne({_id: req.session.user})
  68. .then((merchant)=>{
  69. for(let i = 0; i < req.body.ingredients.length; i++){
  70. for(let j = 0; j < merchant.inventory.length; j++){
  71. if(req.body.ingredients[i].ingredient === merchant.inventory[j].ingredient.toString()){
  72. merchant.inventory[j].quantity += parseFloat(req.body.ingredients[i].quantity);
  73. }
  74. }
  75. }
  76. return merchant.save()
  77. })
  78. .then((merchant)=>{
  79. return;
  80. })
  81. .catch(()=>{});
  82. },
  83. /*
  84. DELETE - Remove an order from the database
  85. */
  86. removeOrder: function(req, res){
  87. if(!req.session.user){
  88. req.session.error = "Must be logged in to do that";
  89. return res.redirect("/");
  90. }
  91. Order.deleteOne({_id: req.params.id})
  92. .then((response)=>{
  93. return res.json({});
  94. })
  95. .catch((err)=>{
  96. return res.json("Error: unable to delete the order");
  97. });
  98. }
  99. }