orderData.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 - Creates a new order from the site
  44. req.body = {
  45. name: user created order id
  46. date: creation date
  47. ingredients: [{
  48. ingredient: id of the ingredient
  49. quantity: amount of the ingredient purchased
  50. price: price per unit for ingredient
  51. }]
  52. }
  53. */
  54. createOrder: function(req, res){
  55. if(!req.session.user){
  56. req.session.error = "Must be logged in to do that";
  57. return res.redirect("/");
  58. }
  59. let validation = Validator.order(req.body);
  60. if(validation !== true){
  61. return res.json(validation);
  62. }
  63. let newOrder = new Order(req.body);
  64. newOrder.merchant = req.session.user;
  65. newOrder.save()
  66. .then((response)=>{
  67. res.json(response);
  68. })
  69. .catch((err)=>{
  70. return res.json("Error: unable to save the new order");
  71. });
  72. Merchant.findOne({_id: req.session.user})
  73. .then((merchant)=>{
  74. for(let i = 0; i < req.body.ingredients.length; i++){
  75. for(let j = 0; j < merchant.inventory.length; j++){
  76. if(req.body.ingredients[i].ingredient === merchant.inventory[j].ingredient.toString()){
  77. merchant.inventory[j].quantity += parseFloat(req.body.ingredients[i].quantity);
  78. }
  79. }
  80. }
  81. return merchant.save()
  82. })
  83. .then((merchant)=>{
  84. return;
  85. })
  86. .catch(()=>{});
  87. },
  88. /*
  89. DELETE - Remove an order from the database
  90. */
  91. removeOrder: function(req, res){
  92. if(!req.session.user){
  93. req.session.error = "Must be logged in to do that";
  94. return res.redirect("/");
  95. }
  96. Order.deleteOne({_id: req.params.id})
  97. .then((response)=>{
  98. return res.json({});
  99. })
  100. .catch((err)=>{
  101. return res.json("Error: unable to delete the order");
  102. });
  103. }
  104. }