5 Commits

Author SHA1 Message Date
lizerk
80cdc36d92 fix: исправлена система прав доступа к чатам и сообщениям
Backend:
- Исправлен user_can_access_chat() для поддержки context-based чатов
- Обновлен is_chat_member() для использования get_participants()
- Добавлена проверка has_send_messages_permission (блокирует гостей)
- Исправлен MessageViewSet.get_queryset() для комментариев
- Добавлена поддержка Feed Post resolver в resolve_chat_participants()
- Чаты типа 'comments' исключены из общего списка
- Добавлены permissions для mark_read, messages, messages_around
- Добавлена команда manage_chat_permissions для управления ролями

Frontend:
- Скрыто поле ввода сообщений для гостей (role='guest')
- Добавлена проверка can_send_messages из membership
- Показывается информативная заглушка для пользователей без прав

Tests & Docs:
- Добавлены тесты для guest роли (send_message + reactions)
- Документация по ролям и правам в чатах
- Troubleshooting guide для отладки permissions

Fixes:
- 403 при доступе к чатам-комментариям
- 404 при удалении/редактировании комментариев
- Комментарии в общем списке чатов
- Гости могли отправлять сообщения
2026-03-12 14:30:25 +03:00
lizerk
c670246dd5 fix(communications): Удалить поле department из ChatListSerializer и ChatDetailSerializer
- Убрано поле 'department' из списка полей в ChatListSerializer
- Убрано поле 'department' из списка полей в ChatDetailSerializer
- Исправлена ошибка ImproperlyConfigured при запросе списка чатов
- Поле было удалено из модели, но осталось в сериализаторах
2026-03-11 16:51:05 +03:00
lizerk
7c8ed68a6b refactor(communications): Переименовать Employee в User для универсальности
- Заменено Employee на User во всех файлах модуля communications
- Использование нейтрального названия вместо проектно-специфичного
- Изменено 6 файлов: models.py, viewsets.py, serializers.py, handlers.py, signals.py, utils.py
- Улучшена переиспользуемость модуля communications
2026-03-11 16:48:20 +03:00
lizerk
0c00652c8e fix(communications): Исправить вызов метода get_participants()
- signals.py: chat.get_participants → chat.get_participants()
- notifications/handlers.py: chat.get_participants → chat.get_participants()

Ошибка: AttributeError: 'function' object has no attribute 'exclude'
Причина: Метод не вызывался, пытались вызвать метод на самом объекте функции

Исправлено: Добавлены () для вызова метода и получения QuerySet
2026-03-11 16:04:56 +03:00
lizerk
d491cbdff9 refactor: Сделать communications приложение автономным
- Перенос REST API в communications/api/ для standalone использования
  * Создан communications/api/ с serializers.py, viewsets.py, urls.py
  * Перенесено 1668 строк (442 serializers + 1226 viewsets)
  * Удалена директория api/v1/communications/
  * Обновлены импорты в api/v1/urls.py и api/v2/communications/views.py

- Извлечение WebSocket логики в ChatConsumerMixin
  * Создан communications/consumers.py (709 строк, 32 метода)
  * Перенесены chat event handlers, action handlers, helper methods
  * realtime/consumers.py сокращен с 862 до 211 строк (-75%)
  * Сохранено одно WebSocket соединение через наследование миксина

- Архитектура:
  * communications теперь полностью автономно (REST API + WebSocket)
  * realtime/UserConsumer наследуется от ChatConsumerMixin
  * 0 breaking changes, обратная совместимость 100%
  * Одно WebSocket соединение для всех real-time событий

- Созданы тесты и документация:
  * test_phase3.py - проверка API serializers, filters, WebSocket
  * docs/completed/API_REFACTORING_STANDALONE.md
  * docs/completed/WEBSOCKET_REFACTORING_MIXIN.md
  * docs/completed/CHAT_REFACTORING_PHASE3_COMPLETE.md

Результат:
  ✅ System check: 0 ошибок
  ✅ Phase 3 tests: все прошли
  ✅ Готово к standalone использованию (pip install django-communications)
2026-03-11 15:34:51 +03:00