other
This commit is contained in:
100
backend/models/Order.model.js
Normal file
100
backend/models/Order.model.js
Normal file
@@ -0,0 +1,100 @@
|
||||
import mongoose from "mongoose";
|
||||
import AutoIncrement from "mongoose-sequence";
|
||||
|
||||
const connection = mongoose.connection;
|
||||
|
||||
const OrderSchema = new mongoose.Schema({
|
||||
orderId: { type: Number, unique: true },
|
||||
|
||||
vendorId: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Vendor",
|
||||
required: true,
|
||||
},
|
||||
storeId: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Store",
|
||||
required: true,
|
||||
},
|
||||
|
||||
pgpAddress: { type: String, required: true },
|
||||
orderDate: { type: Date, default: Date.now, },
|
||||
txid: { type: Array, default: [] },
|
||||
|
||||
products: [
|
||||
{
|
||||
productId: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Product",
|
||||
required: true,
|
||||
},
|
||||
quantity: { type: Number, required: true, min: 0.1 },
|
||||
pricePerUnit: { type: Number, required: true, min: 0.01 },
|
||||
totalItemPrice: { type: Number, required: true, min: 0.01 },
|
||||
},
|
||||
],
|
||||
|
||||
shippingMethod: { type: Object },
|
||||
|
||||
totalPrice: { type: Number, required: true, min: 0.01 },
|
||||
|
||||
// Promotion fields
|
||||
promotion: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Promotion",
|
||||
default: null
|
||||
},
|
||||
promotionCode: {
|
||||
type: String,
|
||||
default: null
|
||||
},
|
||||
discountAmount: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
min: 0
|
||||
},
|
||||
subtotalBeforeDiscount: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
min: 0
|
||||
},
|
||||
|
||||
status: {
|
||||
type: String,
|
||||
enum: [
|
||||
"unpaid",
|
||||
"cancelled",
|
||||
"confirming",
|
||||
"paid",
|
||||
"shipped",
|
||||
"disputed",
|
||||
"completed",
|
||||
"acknowledged"
|
||||
],
|
||||
default: "unpaid",
|
||||
},
|
||||
|
||||
paymentAddress: { type: String, required: true },
|
||||
|
||||
wallet: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Wallet",
|
||||
},
|
||||
|
||||
cryptoTotal: { type: Number, required: true, default: 0 },
|
||||
//txid: { type: String, default: null },
|
||||
|
||||
telegramChatId: { type: String, default: null },
|
||||
telegramBuyerId: { type: String, default: null },
|
||||
telegramUsername: { type: String, default: null },
|
||||
trackingNumber: { type: String, default: null },
|
||||
|
||||
escrowExpiresAt: {
|
||||
type: Date,
|
||||
required: true,
|
||||
default: () => new Date(Date.now() + 8 * 24 * 60 * 60 * 1000),
|
||||
},
|
||||
});
|
||||
|
||||
OrderSchema.plugin(AutoIncrement(connection), { inc_field: "orderId" });
|
||||
export default mongoose.model("Order", OrderSchema);
|
||||
Reference in New Issue
Block a user