You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

order.js 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const mongoose = require('mongoose');
  2. const validator = require('validator');
  3. const OrderSchema = new mongoose.Schema({
  4. coffee: [
  5. {
  6. name: {
  7. type: String,
  8. required: [true, 'Please provide a name.'],
  9. },
  10. customID: {
  11. type: String,
  12. required: [true, 'Please provide a custom id.'],
  13. },
  14. },
  15. ],
  16. time: {
  17. type: Date,
  18. required: [true, 'Please provide a date.'],
  19. validate(value) {
  20. if (!validator.isDate(value)) {
  21. throw new Error('Not a date');
  22. }
  23. },
  24. },
  25. totalPrice: {
  26. type: Number,
  27. required: [true, 'Please provide a total price.'],
  28. validate(value) {
  29. if (value < 0) {
  30. throw new Error('Total price must be a postive number');
  31. }
  32. },
  33. },
  34. numberOfItems: {
  35. type: Number,
  36. required: [true, 'Please provide a total number of items.'],
  37. validate(value) {
  38. if (value < 0) {
  39. throw new Error('Number of items must be a postive number');
  40. }
  41. },
  42. },
  43. fulfilled: {
  44. type: Boolean,
  45. default: false,
  46. },
  47. owner: {
  48. type: mongoose.Schema.Types.ObjectId,
  49. required: [true, 'Please provide an owner.'],
  50. ref: 'User',
  51. },
  52. stripeCheckoutId: {
  53. type: String,
  54. required: [true, 'Please provide a stripe checkout id.'],
  55. unique: [true, 'Stripe checkout id id must be unique.'],
  56. },
  57. });
  58. const Order = mongoose.models.Order || mongoose.model('Order', OrderSchema);
  59. module.exports = Order;