| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- const Order = require("../models/order.js");
- const Merchant = require("../models/merchant.js");
- const ObjectId = require("mongoose").Types.ObjectId;
- const Validator = require("./validator.js");
- module.exports = {
- /*
- GET - get the 25 most recent orders
- return = [
- _id: id of order,
- name: user created id for order,
- date: date order was created,
- ingredients: [{
- _id: unused id of this object,
- ingredient: id of the ingredient,
- price: price per unit of the ingredient,
- quantity: quantity of ingredient in this order
- }]
- ]
- */
- getOrders: function(req, res){
- if(!req.session.user){
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
- return res.redirect("/");
- }
- Order.aggregate([
- {$match: {merchant: ObjectId(req.session.user)}},
- {$sort: {date: -1}},
- {$limit: 25},
- {$project: {
- name: 1,
- date: 1,
- ingredients: 1
- }}
- ])
- .then((orders)=>{
- return res.json(orders);
- })
- .catch((err)=>{
- return res.json("ERROR: UNABLE TO RETRIEVE YOUR ORDERS");
- });
- },
- /*
- POST - retrieves a list of transactions based on the filter
- req.body = {
- startDate: starting date to filter on,
- endDate: ending date to filter on,
- ingredients: list of recipes.to filter on
- }
- */
- orderFilter: function(req, res){
- if(!req.session.user){
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
- return res.redirect("/");
- }
- let objectifiedIngredients = [];
- for(let i = 0; i < req.body.ingredients.length; i++){
- objectifiedIngredients.push(new ObjectId(req.body.ingredients[i]));
- }
- let startDate = new Date(req.body.startDate);
- let endDate = new Date(req.body.endDate);
- endDate = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate() + 1);
- Order.aggregate([
- {$match: {
- merchant: new ObjectId(req.session.user),
- date: {
- $gte: startDate,
- $lt: endDate
- },
- ingredients: {
- $elemMatch: {
- ingredient: {
- $in: objectifiedIngredients
- }
- }
- }
- }},
- {$sort: {date: 1}}
- ])
- .then((orders)=>{
- return res.json(orders);
- })
- .catch((err)=>{
- return res.json("ERROR: UNABLE TO RETRIEVE YOUR TRANSACTIONS");
- });
- },
- /*
- POST - Creates a new order from the site
- req.body = {
- name: user created order id
- date: creation date
- ingredients: [{
- ingredient: id of the ingredient
- quantity: amount of the ingredient purchased
- price: price per unit for ingredient
- }]
- }
- */
- createOrder: function(req, res){
- if(!req.session.user){
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
- return res.redirect("/");
- }
- let validation = Validator.order(req.body);
- if(validation !== true){
- return res.json(validation);
- }
- let newOrder = new Order(req.body);
- newOrder.merchant = req.session.user;
- newOrder.save()
- .then((response)=>{
- res.json(response);
- })
- .catch((err)=>{
- return res.json("ERROR: UNABLE TO SAVE ORDER");
- });
- Merchant.findOne({_id: req.session.user})
- .then((merchant)=>{
- for(let i = 0; i < req.body.ingredients.length; i++){
- for(let j = 0; j < merchant.inventory.length; j++){
- if(req.body.ingredients[i].ingredient === merchant.inventory[j].ingredient.toString()){
- merchant.inventory[j].quantity += parseFloat(req.body.ingredients[i].quantity);
- }
- }
- }
- return merchant.save()
- })
- .then((merchant)=>{
- return;
- })
- .catch(()=>{});
- },
- /*
- DELETE - Remove an order from the database
- */
- removeOrder: function(req, res){
- if(!req.session.user){
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
- return res.redirect("/");
- }
- Order.deleteOne({_id: req.params.id})
- .then((response)=>{
- return res.json({});
- })
- .catch((err)=>{
- return res.json("ERROR: UNABLE TO REMOVE ORDER");
- });
- }
- }
|