- Перенос 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)
31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
"""
|
||
URL routing для Communications REST API
|
||
|
||
Этот модуль определяет DRF router с ViewSets для:
|
||
- Chats (чаты)
|
||
- Messages (сообщения)
|
||
- Polls (голосования)
|
||
|
||
Использование в главном urls.py:
|
||
from communications.api.urls import router as communications_router
|
||
path('api/v1/communications/', include(communications_router.urls))
|
||
|
||
История:
|
||
- Создан: 11 марта 2026 (перенос из api/v1/)
|
||
"""
|
||
from rest_framework.routers import DefaultRouter
|
||
from .viewsets import ChatViewSet, MessageViewSet, PollViewSet
|
||
|
||
# Создаем DRF router
|
||
router = DefaultRouter()
|
||
|
||
# Регистрируем ViewSets
|
||
router.register(r'chats', ChatViewSet, basename='chats')
|
||
router.register(r'messages', MessageViewSet, basename='messages')
|
||
router.register(r'polls', PollViewSet, basename='polls')
|
||
|
||
# Экспортируем для использования в главном urls.py
|
||
urlpatterns = router.urls
|
||
|
||
__all__ = ['router', 'urlpatterns']
|