ajinkya-mhetre-mern
Version:
A MERN starter with frontend and backend folders
68 lines (62 loc) • 1.49 kB
JavaScript
// ===== src/models/Order.js =====
const mongoose = require('mongoose');
const orderItemSchema = new mongoose.Schema({
product: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product',
required: true
},
quantity: {
type: Number,
required: true,
min: 1
},
price: {
type: Number,
required: true
},
farmer: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
}
});
const orderSchema = new mongoose.Schema({
customer: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
items: [orderItemSchema],
totalAmount: {
type: Number,
required: true
},
status: {
type: String,
enum: ['placed', 'processing', 'dispatched', 'delivered', 'cancelled'],
default: 'placed'
},
shippingAddress: {
street: { type: String, required: true },
city: { type: String, required: true },
state: { type: String, required: true },
zipCode: { type: String, required: true }
},
paymentStatus: {
type: String,
enum: ['pending', 'paid', 'failed'],
default: 'pending'
},
trackingNumber: String,
statusHistory: [{
status: String,
timestamp: { type: Date, default: Date.now },
note: String
}]
}, {
timestamps: true
});
orderSchema.index({ customer: 1, status: 1 });
orderSchema.index({ 'items.farmer': 1 });
module.exports = mongoose.model('Order', orderSchema);