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; |