Перейти к содержанию

Chats

Полноценная чат-система с Socket.io.

Возможности

  • Групповые чаты
  • Приватные чаты
  • Чаты привязанные к сделкам
  • Загрузка файлов
  • Закрепление сообщений
  • Пересылка сообщений
  • Real-time через Socket.io

API

Получить чаты

GET /api/chats

// Response
[
  {
    "id": 1,
    "name": "Сделка #123",
    "type": "deal",
    "participants": [...],
    "messages": [{ "content": "Последнее сообщение" }],
    "unreadCount": 3
  }
]

Создать чат

POST /api/chats
{
  "name": "Обсуждение проекта",
  "type": "group",
  "participants": [1, 2, 3],
  "dealId": 123  // опционально
}

Отправить сообщение

POST /api/chats/:id/messages
Content-Type: multipart/form-data

content: "Текст сообщения"
files: [file1, file2]  // до 10 файлов, макс 20MB каждый

Приватный чат

POST /api/chats/private
{
  "recipientId": 5
}
// Вернёт существующий чат или создаст новый

Управление участниками

// Добавить
POST /api/chats/:id/participants
{ "userId": 5 }

// Удалить
DELETE /api/chats/:id/participants/:userId

// Покинуть чат
POST /api/chats/:id/leave

Сообщения

// Редактировать
PUT /api/chats/:id/messages/:messageId
{ "content": "Исправленный текст" }

// Удалить
DELETE /api/chats/:id/messages/:messageId

// Переслать
POST /api/chats/:id/forward
{ "messageId": 123 }

Socket.io Events

// Подключение к чату
socket.join(chatId.toString());

// Получение сообщений
socket.on('new-message', (data) => {
  console.log(data.chatId, data.message);
});

// Серверная отправка
io.to(chatId.toString()).emit('new-message', { chatId, message });

Company Isolation

Пользователи видят только: - Чаты где они участники - Чаты привязанные к сделкам их компании - Общие чаты (type: 'general')

Системные админы (без companyId) видят все чаты.