chat_service¶
1. Назначение¶
chat_service обеспечивает диалоги между пользователем и администратором: создание conversation, отправку сообщений, контроль непрочитанных и операции mark-as-read.
2. API-каталог¶
Базовый префикс: /api/chat/.
Conversations¶
| Метод | Путь | Назначение |
|---|---|---|
| GET/POST | /conversations/ |
Список/создание |
| GET/PUT/PATCH/DELETE | /conversations/{id}/ |
Операции с диалогом |
| GET | /conversations/my_conversation/ |
Получить или создать свой диалог |
| POST | /conversations/{id}/mark_as_read/ |
Массовое чтение сообщений |
Messages¶
| Метод | Путь | Назначение |
|---|---|---|
| GET/POST | /messages/ |
Список/создание сообщений |
| GET/PUT/PATCH/DELETE | /messages/{id}/ |
Операции с сообщением |
| POST | /messages/{id}/mark_as_read/ |
Пометка одного сообщения |
3. Модель данных¶
Conversation¶
userFK ->auth_app.Useris_activecreated_at,updated_at- индексы по активности и времени
Message¶
conversationFKsenderFK ->auth_app.Usercontent(до 5000 символов на уровне serializer)is_readcreated_at
4. Доступ и права¶
- Базово используется
IsAuthenticated. - Админ (
is_staff) видит все диалоги и сообщения. - Пользователь видит только свои conversation/message.
- Session auth требует корректного CSRF-flow для write-запросов.
5. Edge-cases¶
- В
POST /conversations/для admin возможен500при невалидномuserid. - Нет уникального ограничения на один conversation на пользователя.
- Без
conversationв/messages/поведение различается для admin/user.
6. Диаграмма mark-as-read¶
sequenceDiagram
participant U as UserOrAdmin
participant C as chat_service
U->>C: POST /conversations/{id}/mark_as_read
alt user_request
C->>C: mark admin messages as read
else admin_request
C->>C: mark user messages as read
end
C-->>U: 200 updated count
7. Конфигурация¶
- Внешний порт:
8007. - Основные env:
DATABASE_URL,SECRET_KEY,DEBUG. - Зависимость от
auth_serviceчерезAUTH_USER_MODEL.
8. Дополнительная детализация внутренних функций (append-only)¶
8.1 Функции conversation lifecycle¶
ConversationViewSet.get_queryset(self)¶
- Источник:
chat_service/chat_app/views.py - Назначение: вернуть список диалогов с учетом роли и unread-агрегаций.
- Вход:
request.user.- Выход:
- staff: все conversation;
- user: только свой conversation;
- с аннотацией
unread_count.
ConversationViewSet.perform_create(self, serializer)¶
- Назначение: создать conversation (в т.ч. admin-сценарий для конкретного пользователя).
- Вход:
- serializer data;
- для staff возможен
request.data.user. - Выход:
- созданный conversation.
- Edge-cases:
- при невалидном
userid в admin-ветке возможна ошибка создания.
ConversationViewSet.my_conversation(self, request)¶
- Назначение: вернуть или создать личный диалог пользователя.
- Side effects:
get_or_createможет создавать запись conversation при первом обращении.- Ошибки:
403для staff-пользователя (endpoint предназначен для regular user).
ConversationViewSet.mark_as_read(self, request, pk=None)¶
- Назначение: массово пометить сообщения прочитанными в диалоге.
- Side effects:
- update
Message.is_read=Trueдля соответствующей стороны диалога.
8.2 Функции message lifecycle¶
MessageViewSet.get_queryset(self)¶
- Источник:
chat_service/chat_app/views.py - Вход:
- optional query param
conversation. - Выход:
- role-aware queryset сообщений.
- Edge-cases:
- при недоступной conversation часть веток возвращает пустой набор, а не исключение.
MessageViewSet.create(self, request, *args, **kwargs)¶
- Назначение: отправить сообщение в conversation.
- Вход:
conversation,content.- Выход:
201с созданным сообщением;400/403/404в невалидных сценариях.- Side effects:
- запись
Message; - обновление
Conversation.updated_at.
MessageViewSet.mark_as_read(self, request, pk=None)¶
- Назначение: пометить конкретное сообщение как прочитанное.
- Ограничение:
- действие доступно только владельцу сообщения (как получателю) или staff.
8.3 Serializer-уровень и модельные хелперы¶
MessageCreateSerializer.validate_content(self, value)¶
- Источник:
chat_service/chat_app/serializers.py - Назначение: нормализация и валидация текста сообщения.
- Вход:
- строка
content. - Выход:
- trimmed
content. - Ошибки:
- validation error при пустом тексте или длине больше 5000 символов.
Conversation.unread_count_for_user / unread_count_for_admin¶
- Источник:
chat_service/chat_app/models.py - Назначение: вычислить unread счетчики для разных ролей.
- Выход:
intколичество непрочитанных сообщений.
9. Соответствие master-документации¶
Источник верхнего уровня: Master-документация проекта.
| Контроль | Требование | Проверка | Артефакт |
|---|---|---|---|
| Message contract | Контракты conversation/message API синхронизированы с frontend | smoke сценарии чатов | QA report |
| Access boundaries | Role-aware доступ и unread-логика не деградируют | проверка owner/admin выборок | integration tests |
| Operational safety | Массовые mark-as-read операции контролируемы | нагрузочная/функциональная проверка | test notes |
| Delivery quality | Документация и реализация обновляются синхронно | MkDocs strict + code review | build + PR |