- Убрано поле 'department' из списка полей в ChatListSerializer
- Убрано поле 'department' из списка полей в ChatDetailSerializer
- Исправлена ошибка ImproperlyConfigured при запросе списка чатов
- Поле было удалено из модели, но осталось в сериализаторах
- Заменено Employee на User во всех файлах модуля communications
- Использование нейтрального названия вместо проектно-специфичного
- Изменено 6 файлов: models.py, viewsets.py, serializers.py, handlers.py, signals.py, utils.py
- Улучшена переиспользуемость модуля communications
BREAKING CHANGE: Полная независимость communications модуля
Удалено:
- Поле Chat.department (FK на employees.Department)
- Импорты Department из всех файлов communications
- Q(department=...) фильтры в API/WebSocket/rules
Перемещено:
- Сигнал create_main_department_chat → employees/signals.py (проектоспецифичная логика)
Обновлено:
- models.py: удалено поле department, constraint, index
- api/viewsets.py: использует GenericFK через ContentType.objects.get()
- consumers.py: использует GenericFK через ContentType.objects.get()
- rules.py: is_department_chat теперь использует get_participants()
- admin.py: удален department из list_display/search_fields
Миграция:
- 0035_remove_department_field.py: удаляет поле, constraint, index
Результат:
✅ communications НЕ зависит от employees
✅ System check: 0 errors
✅ Использует только GenericFK (context_object)
✅ Полностью переиспользуемый модуль
Для EUSRR-специфичной логики department чатов:
- Настроить COMMUNICATIONS_PARTICIPANT_RESOLVER в settings.py
- Сигнал автосоздания чатов теперь в employees/signals.py
- 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
- Удалены классические Django CBV views (ChatListView, ChatDetailView, ~400 строк)
- Удален MessageForm для HTML форм
- Удалены 6 HTML templates (chat_list.html, chat_detail.html, messengers/*)
- Утилиты _coerce_ts и user_can_access_chat перенесены в utils.py
- Обновлены импорты в communications/api/viewsets.py
Причина: Проект использует Next.js frontend + REST API + WebSocket.
Классические server-side rendered views больше не используются.
Результат:
- System check: 0 errors
- Код стал чище и проще для поддержки
- Нет зависимости от Django templates
- API и WebSocket остались полностью функциональны
- Перенос 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)