Corp/docs/in-progress/COMMUNICATIONS_STATUS.md
Игорь Надеин 42879e0981 feat(communications): Реализация управления уведомлениями чатов и оптимизация
- Добавлен API endpoint для включения/выключения уведомлений чата
- Реализован frontend для управления уведомлениями через меню чата
- Обновлены сигналы для проверки настроек notifications_enabled
- Стандартизирована логика уведомлений для всех типов чатов
- Оптимизированы запросы к БД (1 запрос вместо N для ChatUserSettings)
- Переведены детальные логи с INFO на DEBUG уровень

Файлы:
- backend/api/v1/communications/views.py (новый endpoint)
- backend/api/v1/urls.py (новый маршрут)
- backend/static/js/components/chatMenuActions.js (полная реализация)
- backend/communications/notification_signals.py (проверка настроек + оптимизация)
- backend/notifications/services.py (оптимизация логирования)
2026-01-08 14:39:40 +03:00

32 KiB
Raw Blame History

Текущее состояние приложения Communications

Дата анализа: 8 января 2026 г.
Ветка: feature/communications-work


📊 Общий обзор

Приложение communications представляет собой полнофункциональный корпоративный мессенджер, интегрированный в систему EUSRR. Основная работа по реализации функционала выполнена, включая модели данных, WebSocket коммуникацию, REST API и базовый фронтенд.


✅ Что полностью реализовано

1. Модели данных (15 моделей)

Все модели созданы и протестированы через миграции (20 миграций применено):

Основные модели:

  • Chat - базовая модель чата с типами: private, group, department, channel, announcement, global

    • Поля: name, description, avatar, created_by, include_all_employees
    • Блокировка чатов (для announcement)
    • Уникальные ограничения для main-чатов
  • Message - сообщения с расширенным функционалом

    • Редактирование: is_edited, edited_at, edit_history
    • Мягкое удаление: is_deleted, deleted_at, deleted_by
    • Ответы: reply_to
    • Системные сообщения: is_system, system_type, system_metadata
    • Закрепление: is_pinned, pinned_by, pinned_at
    • Пересылка: is_forwarded
    • Вложения: has_attachments
    • Треды: thread_root, thread_reply_count
  • ChatReadState - состояние прочтения

    • Последнее прочитанное: last_read_at, last_read_message
    • Упоминания: unread_mentions_count
    • Треды: unread_thread_replies_count
    • Статус набора: is_typing, typing_updated_at

Настройки пользователя:

  • ChatUserSettings - персональные настройки чата
    • Закрепление: is_pinned, pinned_at, pin_order
    • Уведомления: notifications_enabled
    • Кастомизация: custom_name
    • Скрытие: is_hidden

Участники и права:

  • ChatMembership - участие в чате с ролями

    • Роли: owner, admin, moderator, member, guest
    • Права: can_send_messages, can_add_members, can_remove_members, can_pin_messages, can_edit_chat
    • История: joined_at, left_at, invited_by
  • ChatAccessPermission - временные права доступа

    • Уровни: read, write, moderate
    • Временные: expires_at
    • Аудит: granted_by, granted_at

Вложения и медиа:

  • MessageAttachment - файлы и медиа
    • Типы: image, video, audio, file
    • Превью для изображений: thumbnail
    • Метаданные: file_size, mime_type, file_name

Пересылка и ответы:

  • ForwardedMessage - информация о пересылке

    • Цепочка: original_message, immediate_source
    • Счетчик: forward_count
    • Сохранение контента при удалении оригинала
  • MessageReply - расширенная информация об ответах

    • Типы: inline, quote, thread
    • Кросс-чат: is_cross_chat_reply
    • Сохранение контекста
  • CrossChatMessage - отправка в чужие чаты

    • Модерация: approved, approved_by, approved_at
    • Режимы отображения: guest, forwarded, announcement
    • Причина: reason

Реакции:

  • MessageReaction - реакции на сообщения

    • Эмодзи и пользователь
    • Временные метки
  • AvailableReaction - доступные реакции

    • Unicode emoji
    • Категории и популярность
    • Активация/деактивация

Опросы (новое):

  • Poll - опросы в чатах

    • Типы: single, multiple, quiz
    • Анонимность, публичные результаты
    • Ограничение по времени: closes_at
    • Статистика голосов
  • PollOption - варианты ответа

    • Текст и порядок
    • Счетчик голосов
  • PollVote - голоса пользователей

    • Отслеживание выбора
    • Временные метки

2. WebSocket Consumer (consumers.py)

ChatConsumer полностью реализован:

Поддерживаемые действия:

  • send_message - отправка сообщений (с reply_to)
  • edit_message - редактирование в реальном времени
  • delete_message - мягкое удаление
  • add_reaction - добавление реакции
  • remove_reaction - удаление реакции
  • typing - начало набора текста
  • stop_typing - окончание набора

Real-time события:

  • chat.message - новое сообщение
  • chat.message_edited - сообщение отредактировано
  • chat.message_deleted - сообщение удалено
  • chat.reaction_added - реакция добавлена
  • chat.reaction_removed - реакция удалена
  • chat.user_typing - пользователь печатает
  • chat.user_stopped_typing - пользователь остановил печатать

Особенности:

  • Полная сериализация сообщений с вложениями
  • Обработка пересланных сообщений
  • Информация о реакциях всех пользователей
  • Превью ответов
  • Автоматическая группировка по чатам

3. Views и URL (views.py, urls.py)

Реализованные view:

  • ChatListView - список чатов пользователя

    • Отображение последних сообщений
    • Счетчик непрочитанных
    • Фильтрация по типам
  • ChatDetailView - детальный просмотр чата

    • Пагинация сообщений (50 на страницу)
    • Форма отправки
    • Проверка прав доступа
    • Загрузка истории (before/after timestamp)
  • start_private_chat - создание приватного чата

    • Автоматический поиск существующего
    • Создание нового при необходимости
  • chat_mark_read - отметка как прочитанное

    • Обновление ChatReadState

URL маршруты:

/communications/chats/ - список чатов
/communications/chats/<id>/ - детали чата
/communications/chats/start/<employee_id>/ - начать личный чат
/communications/chats/<id>/mark-read/ - отметить прочитанным

4. Frontend (JavaScript модули)

Реализованные JS модули:

chat-detail-enhanced.js (~500 строк):

  • WebSocket интеграция
  • Редактирование сообщений
  • Удаление сообщений
  • Быстрые реакции (6 эмодзи при наведении)
  • Ответы на сообщения
  • Индикатор "печатает..."
  • Отображение вложений
  • Информация о пересылке
  • Автопереподключение WebSocket

chat-reactions-integration.js:

  • Обработка WS событий реакций
  • Обновление UI реакций в реальном времени

chat-detail-init.js:

  • Инициализация модулей
  • Настройка WebSocket подключения

CSS стили:

css/components/chat-list-enhanced.css:

  • Стили для списка чатов
  • Контекстное меню
  • Закрепленные чаты (желтый фон)
  • Анимация обновлений

css/components/chat-enhanced.css (частично):

  • Превью ответов
  • Информация о пересылке
  • Кнопки действий
  • Реакции
  • Вложения

5. Админ-панель (admin.py)

Полностью настроена для всех моделей:

  • Inline редактирование вложений
  • Inline редактирование участников
  • Фильтры по типам, статусам
  • Поиск по названию, контенту
  • Read-only поля для системных данных

⚠️ Что требует доработки

1. REST API ✅ РЕАЛИЗОВАНО!

✅ API реализован в отдельном приложении backend/api/v1/communications/

Реализованные endpoints (18 штук):

Чаты:

  • ✅ GET /api/v1/communications/chats/ - список чатов пользователя
  • ✅ POST /api/v1/communications/chats/create/ - создание чата
  • ✅ GET /api/v1/communications/chats/<pk>/messages/ - загрузка истории
  • ✅ POST /api/v1/communications/chats/<chat_id>/pin/ - закрепление чата

Сообщения:

  • ✅ POST /api/v1/communications/upload-message/ - отправка с вложениями
  • ✅ POST /api/v1/communications/messages/<id>/edit/ - редактирование
  • ✅ POST /api/v1/communications/messages/<id>/delete/ - удаление
  • ✅ POST /api/v1/communications/messages/forward/ - пересылка
  • ✅ POST /api/v1/communications/messages/bulk-delete/ - массовое удаление

Реакции:

  • ✅ GET /api/v1/communications/reactions/available/ - доступные реакции
  • ✅ GET /api/v1/communications/messages/<id>/reactions/ - реакции сообщения
  • ✅ POST /api/v1/communications/messages/<id>/react/ - добавить реакцию
  • ✅ POST /api/v1/communications/messages/<id>/unreact/ - удалить реакцию

Опросы (Polls):

  • ✅ POST /api/v1/communications/polls/create/ - создание опроса
  • ✅ POST /api/v1/communications/polls/<id>/vote/ - голосование
  • ✅ POST /api/v1/communications/polls/<id>/close/ - закрытие опроса
  • ✅ GET /api/v1/communications/polls/<id>/results/ - результаты

Файлы:

  • ✅ Загрузка файлов интегрирована в upload_message_with_attachments
  • ✅ Автоопределение типа файла (image/video/audio/file)
  • ✅ Сохранение метаданных (размер, MIME-тип, имя)

Статус: ✅ Полностью реализовано
Приоритет: Завершено

Недостающие endpoints (низкий приоритет):

❌ POST /api/v1/communications/chats/<id>/update/ - обновление чата
❌ POST /api/v1/communications/chats/<id>/notifications/ - настройки уведомлений
❌ POST /api/v1/communications/messages/<id>/pin/ - закрепление сообщения
❌ POST /api/v1/communications/chats/<id>/member/add/ - добавление участника
❌ POST /api/v1/communications/chats/<id>/member/remove/ - удаление участника

2. Опросы (Polls) ✅ Backend готов!

✅ Модели созданы (Poll, PollOption, PollVote)
✅ Админ-панель настроена
✅ API полностью реализован (4 эндпоинта):

  • POST /polls/create/ - создание с настройками (анонимность, множественный выбор, викторина)
  • POST /polls/<id>/vote/ - голосование с валидацией
  • POST /polls/<id>/close/ - закрытие опроса
  • GET /polls/<id>/results/ - получение результатов ✅ WebSocket интеграция (отправка через chat.message)
    ✅ Поддержка викторин с правильными ответами
    ✅ Автозакрытие опросов по таймеру
    ❌ Frontend UI не реализован

Требуется:

  • Модальное окно создания опроса
  • Отображение опросов в чате
  • UI голосования
  • Визуализация результатов (графики)
  • Отображение правильных ответов в викторинах

Статус: 🟡 Backend готов, нужен Frontend
Приоритет: Средний

3. Вложения (Attachments) ✅ Полностью работает!

✅ Модель MessageAttachment создана
✅ Связь с Message настроена
✅ Upload endpoint реализован (/upload-message/)
✅ Автоопределение типа файла (image/video/audio/file)
✅ Сохранение метаданных (размер, MIME-тип, имя)
✅ Отправка через WebSocket с полной информацией
🟡 Frontend частично реализован (отображение файлов)
❌ Drag & drop загрузка не реализована
❌ Прогресс-бар загрузки отсутствует
❌ Превью для видео/аудио базовое

Требуется доработать:

  • Drag & drop интерфейс
  • Прогресс-бар при загрузке
  • Превью для видео с плеером
  • Превью для аудио с waveform
  • Валидация размера файлов (клиент)
  • Пакетная загрузка нескольких файлов

Статус: ✅ Backend готов, Frontend требует улучшения
Приоритет: Средний

4. Пересылка сообщений (Forward) ✅ Полностью работает!

✅ Модель ForwardedMessage создана
✅ Поля в Message добавлены (is_forwarded, metadata)
✅ API endpoint реализован (POST /messages/forward/)
✅ Поддержка пересылки нескольких сообщений
✅ Сохранение цепочки пересылок
✅ Копирование вложений
✅ WebSocket уведомления
✅ Отображение метаданных (оригинальный автор, чат, дата)
❌ UI выбора целевого чата не реализован
❌ Модальное окно для пересылки отсутствует

Требуется доработать:

  • Модальное окно с выбором чата
  • Список доступных чатов для пересылки
  • Предпросмотр пересылаемых сообщений
  • Возможность добавить комментарий к пересылке

Статус: ✅ Backend готов, нужен UI
Приоритет: Средний

5. Треды (Threads)

✅ Поля в Message (thread_root, thread_reply_count)
❌ UI для тредов отсутствует
❌ WebSocket обработка отсутствует
❌ Боковая панель для тредов не реализована

Требуется:

  • Боковая панель с тредами
  • Счетчики ответов
  • Навигация по тредам
  • WebSocket события для тредов

Статус: ❌ Не реализовано
Приоритет: Низкий

6. Упоминания (@mentions)

✅ Поле unread_mentions_count в ChatReadState
❌ Парсинг @username в тексте
❌ Подсветка упоминаний
❌ Уведомления об упоминаниях
❌ Автодополнение при вводе @

Требуется:

  • Regex парсинг @username
  • Подсветка в UI
  • Интеграция с notifications
  • Dropdown с предложениями пользователей

Статус: ❌ Не реализовано
Приоритет: Средний

7. Поиск по сообщениям

❌ Полностью отсутствует

Требуется:

  • Поисковая строка в чате
  • Full-text search по содержимому
  • Фильтры (дата, автор, тип)
  • Навигация по результатам
  • Подсветка найденного текста

Статус: ❌ Не реализовано
Приоритет: Средний

8. Контекстное меню чатов 🟡 Частично

🟡 Частично реализовано в CSS
✅ API endpoints реализованы:

  • POST /chats/<id>/pin/ - закрепление/открепление
  • Остальные действия можно сделать через существующие endpoints ❌ JavaScript обработчики контекстного меню отсутствуют
    ❌ Модальные окна для действий не реализованы

Функции контекстного меню:

  • ✅ Закрепить/открепить чат (API готов)
  • ❌ Выключить уведомления (нужен UI)
  • ❌ Скрыть чат (нужен UI)
  • ❌ Отметить прочитанным (есть endpoint, нужен UI)
  • ❌ Покинуть чат (нужна реализация)
  • ❌ Удалить чат (для владельца)

Статус: 🟡 API готов, нужны JS обработчики
Приоритет: Средний

9. Групповые чаты ✅ Backend готов!

✅ Модель Chat поддерживает type='group'
✅ ChatMembership для участников
✅ API endpoint реализован (POST /chats/create/)
✅ Поддержка добавления участников при создании
✅ Создатель автоматически добавляется
✅ Загрузка аватара чата
❌ UI создания группового чата отсутствует
❌ Управление участниками не реализовано
❌ Редактирование названия/описания/аватара отсутствует (UI)

Требуется:

  • Модальное окно создания группы
  • Список сотрудников с checkbox для выбора
  • UI для управления участниками (добавление/удаление)
  • Редактирование информации о группе
  • Отображение ролей и прав участников

Статус: ✅ Backend готов, нужен UI
Приоритет: Высокий

10. Каналы и объявления

✅ Модели поддерживают channel и announcement
✅ Блокировка чатов реализована
❌ UI для создания канала отсутствует
❌ Система модерации не реализована
❌ Права только на чтение не обработаны

Статус: 🟡 Частично
Приоритет: Средний


🔧 Технические проблемы

1. Архитектура API ✅ Решено!

✅ API вынесен в отдельное приложение backend/api/v1/communications/
✅ Правильная организация:

  • views.py - основные API views (14 функций)
  • poll_views.py - API для опросов (4 функции)
  • Регистрация в api/v1/urls.py ✅ REST-интерфейс для внешних интеграций
    ✅ Легко тестировать отдельные функции
    ✅ Возможна документация API (Swagger)

Статус: ✅ Решено

2. Неполная интеграция фронтенда

Модули chat-detail-enhanced.js созданы, но:

  • Не все функции подключены
  • Отсутствуют модальные окна
  • Нет обработки ошибок
  • Слабая валидация на клиенте

Решение: Завершить интеграцию JS модулей

3. Отсутствие тестов

Файл tests.py существует, но пустой:

  • Нет unit-тестов для моделей
  • Нет интеграционных тестов API
  • Не тестируется WebSocket
  • Нет e2e тестов

Решение: Написать тесты с pytest/pytest-django

4. Производительность

Потенциальные проблемы:

  • N+1 запросы при загрузке списка чатов
  • Не используется select_related/prefetch_related везде
  • Нет кэширования часто запрашиваемых данных
  • WebSocket группы могут стать узким местом

Решение: Оптимизация запросов, Redis для кэша

5. Безопасность

Требует внимания:

  • Загрузка файлов без проверки типа/размера
  • Отсутствие rate limiting для API
  • XSS уязвимости при отображении контента
  • CSRF проверки для API

Решение: Добавить валидацию, throttling, санитизацию


📝 Приоритетный план доработки

✅ Завершено в Backend (больше не требуется)

  1. ✅ REST API создан - 18 эндпоинтов реализовано
  2. ✅ Загрузка файлов работает - upload endpoint готов
  3. ✅ Групповые чаты (Backend) - API создания готов
  4. ✅ Опросы (Backend) - полный цикл реализован
  5. ✅ Пересылка сообщений (Backend) - API готов
  6. ✅ Реакции - полностью работают

Этап 1: Критичные UI компоненты (1-2 недели)

  1. Создание групповых чатов (UI) 🔴

    • Модальное окно создания
    • Выбор участников (список сотрудников)
    • Загрузка аватара
    • Установка названия и описания
  2. Модальное окно пересылки 🔴

    • Список доступных чатов
    • Выбор целевого чата
    • Предпросмотр пересылаемых сообщений
    • Интеграция с API /messages/forward/
  3. Контекстное меню чатов (JS) 🔴

    • Обработчики ПКМ
    • Интеграция с API закрепления
    • Действия: скрыть, уведомления, прочитано
    • Покинуть/удалить чат
  4. Drag & Drop загрузка файлов 🔴

    • Зона перетаскивания
    • Прогресс-бар загрузки
    • Превью перед отправкой
    • Валидация размера

Этап 2: Важные UI функции (2-3 недели)

  1. Опросы (UI) 🟡

    • Модальное окно создания опроса
    • Отображение опросов в чате
    • UI голосования с анимацией
    • Графики результатов
    • Индикация правильных ответов (викторины)
  2. Управление групповыми чатами 🟡

    • Редактирование названия/описания
    • Список участников с ролями
    • Добавление/удаление участников
    • Управление правами
  3. Упоминания (@mentions) 🟡

    • Парсинг @username в тексте
    • Подсветка упоминаний
    • Автодополнение при вводе @
    • Уведомления об упоминаниях
  4. Поиск по сообщениям 🟡

    • UI поиска в чате
    • Full-text search
    • Фильтры (дата, автор, тип)
    • Навигация по результатам

Этап 3: Дополнительные функции (3-4 недели)

  1. Треды (Threads) 🟢

    • Боковая панель с тредами
    • Счетчики ответов
    • Навигация по тредам
    • WebSocket для тредов
  2. Каналы и объявления (UI) 🟢

    • UI создания канала
    • Модерация сообщений
    • Права только на чтение
  3. Оптимизация производительности 🟢

    • Query optimization (select_related/prefetch)
    • Redis кэширование
    • Индексы БД
    • Пагинация везде
  4. Тестирование 🟢

    • Unit тесты для API
    • Integration тесты WebSocket
    • E2E тесты UI

Отложенные функции (низкий приоритет)

  • Недостающие endpoints (update chat, pin message, manage members)
  • Голосовые сообщения
  • Видеозвонки
  • Экспорт истории чата
  • Боты и автоматизация
  • Rich text редактор
  • Push-уведомления

🎯 Рекомендации

Немедленные действия:

  1. ✅ Создать ветку feature/communications-work (СДЕЛАНО)
  2. ✅ REST API - полностью реализован (18 endpoints)
  3. ✅ Загрузка файлов - endpoint работает
  4. 🔴 UI для групповых чатов - модальное окно создания
  5. 🔴 Модальное окно пересылки - выбор целевого чата
  6. 🟡 Добавить тесты - для стабильности API

Архитектурные решения:

  • ✅ Django function-based views используются для API (правильный выбор)
  • ✅ WebSocket интеграция работает корректно
  • 🟡 Рассмотреть Celery для асинхронной обработки медиа (оптимизация)
  • ✅ Redis уже используется для Channels
  • 🔴 Применить select_related/prefetch_related везде (оптимизация)
  • 🟡 Внедрить pytest для тестирования API

Документация:

  • 🔴 Создать API документацию (можно использовать drf-spectacular)
  • 🟡 Написать пользовательские инструкции
  • ✅ WebSocket протокол задокументирован (в consumers.py)
  • 🟡 Добавить архитектурные диаграммы

📚 Существующая документация

В папке backend/communications/:

  • ✅ MESSENGER_IMPLEMENTATION_COMPLETE.md - что реализовано
  • ✅ MESSENGER_IMPROVEMENTS.md - планы улучшений
  • ❌ MESSENGER_INTEGRATION_GUIDE.md - пусто
  • ❌ MODERN_CHAT_LIST_REDESIGN.md - пусто

Требуется обновить документацию под текущее состояние.


🔍 Структура файлов

backend/communications/
├── models.py ✅ (15 моделей, 1248 строк)
├── views.py ✅ (4 view, 530 строк)
├── consumers.py ✅ (WebSocket, 841 строк)
├── urls.py ✅ (5 маршрутов)
├── admin.py ✅ (админки для всех моделей)
├── forms.py ✅
├── signals.py ✅
├── notification_signals.py ✅
├── context_processors.py ✅
├── tests.py ❌ (пустой)
├── management/
│   └── commands/
│       ├── init_reactions.py ✅
│       └── update_department_chat_names.py ✅
└── migrations/ ✅ (20 миграций)

backend/api/v1/communications/ 🆕
├── views.py ✅ (14 API функций, 1037 строк)
├── poll_views.py ✅ (4 API функции, 398 строк)
└── __init__.py ✅

backend/api/v1/
└── urls.py ✅ (18 маршрутов для communications)

static/js/
├── chat-detail-enhanced.js ✅
├── chat-detail-init.js ✅
├── chat-reactions-integration.js ✅
└── chat-list-enhanced.js.old ❓

static/css/components/
├── chat-enhanced.css 🟡 (частично)
└── chat-list-enhanced.css ✅

templates/communications/
├── chat_list.html ✅
└── chat_detail.html ✅

📊 Статистика кода

  • Python файлы: ~5900 строк
    • communications/: ~3500 строк
    • api/v1/communications/: ~1435 строк
    • consumers.py: ~841 строк
  • JavaScript: ~800 строк
  • CSS: ~400 строк
  • Моделей: 15
  • Миграций: 20 (все применены ✅)
  • Django Views: 4
  • API Endpoints: 18 ✅
  • WebSocket actions: 7
  • WS events: 7
  • URL маршрутов: 5 (UI) + 18 (API)

✅ Выводы

Что хорошо:

  1. ✅ Качественная архитектура моделей
  2. ✅ Полная WebSocket реализация
  3. ✅ REST API полностью реализован (18 endpoints)
  4. ✅ Расширенная админ-панель
  5. ✅ Миграции применены и работают
  6. ✅ Базовый фронтенд реализован
  7. ✅ Опросы (Polls) backend готов
  8. ✅ Загрузка файлов работает
  9. ✅ Пересылка сообщений backend готов

Что требует работы:

  1. 🔴 UI для создания групповых чатов - критично
  2. 🔴 Модальное окно пересылки - критично
  3. 🔴 Контекстное меню чатов (JS) - важно
  4. 🟡 UI для опросов - важно
  5. 🟡 Drag & Drop загрузки - улучшение UX
  6. 🟡 Управление участниками групп - важно
  7. ❌ Нет тестов - рискованно для продакшена
  8. 🟡 Упоминания (@mentions) - дополнительная функция
  9. 🟡 Поиск по сообщениям - улучшение UX

Готовность к продакшену:

~80% - backend практически готов, требуется доработка UI компонентов.

Backend готовность: 95%
Frontend готовность: 60%


Следующий шаг: Начать с UI для создания групповых чатов и модального окна пересылки.