67 lines
1.3 KiB
JavaScript
67 lines
1.3 KiB
JavaScript
const mongoose = require('mongoose')
|
|
const { Schema } = mongoose
|
|
|
|
const messageSchema = new Schema({
|
|
senderId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'User',
|
|
required: true
|
|
},
|
|
receiverId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'User',
|
|
required: true
|
|
},
|
|
content: {
|
|
type: String,
|
|
required: false,
|
|
trim: true
|
|
},
|
|
file: {
|
|
type: String,
|
|
required: false
|
|
},
|
|
fileType: {
|
|
type: String,
|
|
enum: ['image', 'video', 'file', 'voice', 'location'],
|
|
required: false
|
|
},
|
|
replyToId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'Message',
|
|
required: false
|
|
},
|
|
forwardedFrom: {
|
|
userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
|
|
userName: String,
|
|
displayName: String
|
|
},
|
|
createdAt: {
|
|
type: Date,
|
|
default: Date.now
|
|
},
|
|
readStatus: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
/** Auto-delete after this time (self-destruct messages) */
|
|
expiresAt: {
|
|
type: Date,
|
|
required: false,
|
|
index: true
|
|
},
|
|
/** View-once photo / video / voice */
|
|
viewOnce: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
viewOnceOpenedAt: {
|
|
type: Date,
|
|
required: false
|
|
}
|
|
})
|
|
|
|
const MessageModel = mongoose.model('Message', messageSchema)
|
|
|
|
module.exports = MessageModel
|