order.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. const isSanitary = require("../validator.js").isSanitary;
  2. const mongoose = require("mongoose");
  3. const OrderSchema = new mongoose.Schema({
  4. merchant: {
  5. type: mongoose.Schema.Types.ObjectId,
  6. ref: "Merchant",
  7. required: [true, "MUST PROVIDE THE MERCHANT"],
  8. index: true
  9. },
  10. name: {
  11. type: String,
  12. minlength: [2, "ORDER NAME MUST CONTAIN AT LEAST 2 CHARACTERS"],
  13. validate: {
  14. validator: isSanitary,
  15. message: "ORDER NAME CONTAINS ILLEGAL CHARACTERS"
  16. }
  17. },
  18. date: {
  19. type: Date,
  20. required: [true, "MUST PROVIDE A DATE FOR THE ORDER"],
  21. validate: {
  22. validator: date => date < new Date,
  23. message: "ORDER DATE CANNOT BE SET TO THE FUTURE"
  24. }
  25. },
  26. taxes: Number,
  27. fees: Number,
  28. ingredients: [{
  29. ingredient: {
  30. type: mongoose.Schema.Types.ObjectId,
  31. ref: "Ingredient",
  32. required: [true, "MUST PROVIDE THE INGREDIENT"]
  33. },
  34. quantity: {
  35. type: Number,
  36. required: [true, "MUST PROVIDE THE QUANTITY FOR EVERY INGREDIENT IN THE ORDER"],
  37. min: [0, "INGREDIENT QUANTITY IN AN ORDER CANNOT BE LESS THAN 0"]
  38. },
  39. pricePerUnit: {
  40. type: Number,
  41. min: [0, "PRICE PER UNIT CANNOT BE A NEGATIVE NUMBER"]
  42. }
  43. }]
  44. });
  45. OrderSchema.index({merchant: 1, date: 1});
  46. module.exports = mongoose.model("Order", OrderSchema);