68 lines
1.2 KiB
JavaScript
68 lines
1.2 KiB
JavaScript
import mongoose from "mongoose";
|
|
|
|
const MessageSchema = new mongoose.Schema({
|
|
sender: {
|
|
type: String,
|
|
enum: ["buyer", "vendor"],
|
|
required: true
|
|
},
|
|
buyerId: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
vendorId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: "Vendor",
|
|
required: true
|
|
},
|
|
content: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
attachments: [{
|
|
type: String,
|
|
required: false
|
|
}],
|
|
read: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
createdAt: {
|
|
type: Date,
|
|
default: Date.now
|
|
}
|
|
});
|
|
|
|
const ChatSchema = new mongoose.Schema({
|
|
buyerId: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
vendorId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: "Vendor",
|
|
required: true
|
|
},
|
|
storeId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: "Store",
|
|
required: true
|
|
},
|
|
messages: [MessageSchema],
|
|
orderId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: "Order",
|
|
required: false
|
|
},
|
|
lastUpdated: {
|
|
type: Date,
|
|
default: Date.now
|
|
}
|
|
});
|
|
|
|
// Create indexes for faster queries
|
|
ChatSchema.index({ buyerId: 1, vendorId: 1 });
|
|
ChatSchema.index({ vendorId: 1, lastUpdated: -1 });
|
|
ChatSchema.index({ buyerId: 1, lastUpdated: -1 });
|
|
|
|
export default mongoose.model("Chat", ChatSchema);
|