37 lines
1.7 KiB
JavaScript
37 lines
1.7 KiB
JavaScript
![]() |
const mongoose = require('mongoose');
|
|||
|
|
|||
|
const conversationSchema = new mongoose.Schema(
|
|||
|
{
|
|||
|
participants: [
|
|||
|
{
|
|||
|
type: mongoose.Schema.Types.ObjectId,
|
|||
|
ref: 'User',
|
|||
|
required: true,
|
|||
|
},
|
|||
|
],
|
|||
|
// Можно добавить поле для последнего сообщения, чтобы легче было сортировать/отображать в списке чатов
|
|||
|
lastMessage: {
|
|||
|
type: mongoose.Schema.Types.ObjectId,
|
|||
|
ref: 'Message',
|
|||
|
},
|
|||
|
// lastMessageTimestamp: { // Или просто timestamp последнего сообщения
|
|||
|
// type: Date,
|
|||
|
// default: Date.now
|
|||
|
// }
|
|||
|
},
|
|||
|
{
|
|||
|
timestamps: true, // createdAt, updatedAt для диалога
|
|||
|
}
|
|||
|
);
|
|||
|
|
|||
|
// Индекс для участников, чтобы быстро находить диалоги по двум пользователям
|
|||
|
// Уникальный индекс гарантирует, что между двумя пользователями будет только один диалог
|
|||
|
// Порядок участников в массиве важен для уникальности, если не использовать $all
|
|||
|
// Для простоты можно не делать его уникальным на уровне схемы, а проверять при создании.
|
|||
|
// Либо хранить участников всегда в отсортированном порядке их ID.
|
|||
|
// Пока оставим без уникального индекса, будем проверять в коде.
|
|||
|
// conversationSchema.index({ participants: 1 });
|
|||
|
|
|||
|
const Conversation = mongoose.model('Conversation', conversationSchema);
|
|||
|
|
|||
|
module.exports = Conversation;
|