# Документация модуля диалогов (Conversations Module) Модуль Conversations является центральным узлом Knot Messager, обеспечивающим взаимодействие пользователей через чаты, управление сообщениями и организацию рабочего пространства с помощью папок. ## Основные сущности ### 1. Чат (Chat) Основная единица общения. Бывает трех типов: * **Personal**: Диалог между двумя пользователями. * **Group**: Групповой чат с неограниченным (или лимитированным админом) количеством участников. * **Favorites**: Спец-чат "Избранное" (заметки для самого себя). ### 2. Участник (Member) Связующее звено между пользователем и чатом. Хранит: * Роль (Admin, Moderator, Member). * **Cursors**: Указатели на последнее прочитанное и последнее доставленное сообщение для синхронизации статусов. ### 3. Папка (Folder) Инструмент группировки чатов. * **Системные папки**: "Все чаты", "Новые" (с непрочитанными), "Без звука". * **Пользовательские папки**: Создаются пользователем вручную по имени и иконке. * *Особенность*: Один чат может находиться одновременно в нескольких папках. ## Функциональные возможности ### Управление чатами * Создание личных и групповых чатов. * Редактирование названия, описания и аватара группы (с поддержкой обрезки изображения). * Управление участниками (добавление, удаление, выход из чата). * Закрепление чатов (Pin) для быстрого доступа. * Очистка истории сообщений для конкретного пользователя. ### Работа с сообщениями Модуль предоставляет высокоуровневый API для отправки контента: * **Текстовые сообщения**: С поддержкой цитирования и ответов. * **Медиа-сообщения**: Фото, видео, файлы, голосовые сообщения. * **Опросы**: Анонимные или публичные, с выбором одного или нескольких вариантов. * **Истории**: Ответы на истории и реакции (пересылаются в чат как спец-сообщения). * **Пересылка (Forwarding)**: Отправка существующих сообщений в другие чаты. ### Синхронизация и поиск * **Курсоры чтения**: Позволяют клиенту точно знать, какие сообщения новы для пользователя. * **Shared Media**: Быстрый доступ ко всем файлам, ссылкам или фото, когда-либо отправленным в конкретном чате. * **Глобальный поиск**: Поиск по тексту сообщений во всех доступных чатах. --- ## API Эндпоинты ### Чаты (`api/chats`) * `GET /` — Получение списка всех чатов пользователя. * `POST /personal` — Создание диалога с пользователем. * `POST /group` — Создание группы. * `PUT /{id}` — Обновление информации о чате. * `POST /{id}/pin` — Закрепить/открепить чат. * `POST /{id}/avatar` — Загрузка аватара группы. ## Зависимость от глобальных настроек (Admin Module) Логика модуля Conversations напрямую зависит от конфигурации, установленной администратором в `Admin Module`: 1. **Медиа-сообщения**: Перед отправкой фото, видео или файлов проверяется флаг `AllowMedia`. Если он выключен, сервер возвращает ошибку `Media.Disabled`. 2. **Опросы**: Создание опросов возможно только при включенном флаге `AllowPolls`. В противном случае возвращается `Polls.Disabled`. 3. **Папки**: Функционал группировки чатов по папкам контролируется флагом `EnableFolders`. При его отключении команды добавления в папку ([AddToFolder](file:///e:/GIT/forkmessager/backend/src/Modules/Conversations/Domain/Folder.cs#67-71)) блокируются с ошибкой `Folders.Disabled`. 4. **Групповые чаты**: Лимит на количество участников в группе (`MaxGroupParticipants`) проверяется при создании чата и добавлении новых членов. ## Сообщения (`api/messages`) * `POST /chat/{chatId}` — Отправка сообщения. * `GET /chat/{chatId}` — Получение истории (поддерживает пагинацию через курсоры). * `POST /upload` — Предварительная загрузка файла в хранилище. * `GET /search` — Поиск сообщений. ### Папки (`api/folders`) * `POST /add` — Добавление чата в папку. * `POST /remove` — Удаление из папки. --- ## Интеграция и Real-time Модуль тесно интегрирован с: * **Messaging**: Для фактического хранения и доставки тел сообщений (в MongoDB). * **Storage**: Для обработки вложений и аватаров. * **SignalR (ChatHub)**: Для мгновенной доставки уведомлений о новых сообщениях, статусах прочтения (`message_read`) и обновлении состава участников.