Initial commit
This commit is contained in:
85
server/models/Order.js
Normal file
85
server/models/Order.js
Normal file
@@ -0,0 +1,85 @@
|
||||
const mongoose = require('mongoose');
|
||||
|
||||
const orderItemSchema = new mongoose.Schema({
|
||||
product: { type: mongoose.Schema.Types.ObjectId, ref: 'Product', required: true },
|
||||
name: { type: String, required: true },
|
||||
image: { type: String, required: true },
|
||||
price: { type: Number, required: true },
|
||||
quantity: { type: Number, required: true },
|
||||
variantColor: { type: String, default: '' },
|
||||
variantFinish: { type: String, default: '' },
|
||||
sku: { type: String, default: '' }
|
||||
});
|
||||
|
||||
const statusHistorySchema = new mongoose.Schema({
|
||||
status: { type: String, required: true },
|
||||
note: { type: String, default: '' },
|
||||
updatedAt: { type: Date, default: Date.now }
|
||||
});
|
||||
|
||||
const orderSchema = new mongoose.Schema({
|
||||
orderNumber: { type: String, required: true, unique: true },
|
||||
user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
|
||||
orderItems: [orderItemSchema],
|
||||
|
||||
// Indian Shipping Address Schema
|
||||
shippingAddress: {
|
||||
fullName: { type: String, default: '' },
|
||||
mobileNumber: { type: String, required: true },
|
||||
addressLine1: { type: String, required: true },
|
||||
addressLine2: { type: String, default: '' },
|
||||
landmark: { type: String, default: '' },
|
||||
city: { type: String, required: true },
|
||||
district: { type: String, default: '' },
|
||||
state: { type: String, required: true },
|
||||
postalCode: { type: String, required: true }, // 6-digit PIN code
|
||||
country: { type: String, required: true, default: 'India' }
|
||||
},
|
||||
|
||||
// Payment Configuration
|
||||
paymentMethod: {
|
||||
type: String,
|
||||
required: true,
|
||||
enum: ['Razorpay', 'UPI', 'Stripe', 'Credit/Debit Card', 'Net Banking', 'Cash on Delivery']
|
||||
},
|
||||
paymentResult: {
|
||||
id: { type: String },
|
||||
status: { type: String },
|
||||
update_time: { type: String },
|
||||
email_address: { type: String }
|
||||
},
|
||||
|
||||
// Pricing & Indian GST breakdown
|
||||
itemsPrice: { type: Number, required: true, default: 0 },
|
||||
gstPercentage: { type: Number, default: 18 },
|
||||
cgst: { type: Number, default: 0 },
|
||||
sgst: { type: Number, default: 0 },
|
||||
igst: { type: Number, default: 0 },
|
||||
taxPrice: { type: Number, required: true, default: 0 },
|
||||
shippingPrice: { type: Number, required: true, default: 0 },
|
||||
discountAmount: { type: Number, default: 0 },
|
||||
totalAmount: { type: Number, required: true, default: 0 },
|
||||
|
||||
// Order Status Lifecycle
|
||||
orderStatus: {
|
||||
type: String,
|
||||
enum: ['Pending', 'Payment Pending', 'Payment Confirmed', 'Processing', 'Packed', 'Shipped', 'Out for Delivery', 'Delivered', 'Cancelled', 'Returned', 'Refunded'],
|
||||
default: 'Pending'
|
||||
},
|
||||
statusHistory: [statusHistorySchema],
|
||||
|
||||
// Indian Courier Logistics
|
||||
courierProvider: { type: String, default: 'Delhivery' }, // Delhivery, BlueDart, Bluedart, FedEx, Xpressbees
|
||||
awbNumber: { type: String, default: '' },
|
||||
trackingNumber: { type: String, default: '' },
|
||||
trackingUrl: { type: String, default: '' },
|
||||
estimatedDeliveryDate: { type: Date },
|
||||
|
||||
isPaid: { type: Boolean, default: false },
|
||||
paidAt: { type: Date },
|
||||
isDelivered: { type: Boolean, default: false },
|
||||
deliveredAt: { type: Date },
|
||||
notes: { type: String, default: '' }
|
||||
}, { timestamps: true });
|
||||
|
||||
module.exports = mongoose.model('Order', orderSchema);
|
||||
Reference in New Issue
Block a user