Feature: отправка сообщений с файлами через WebSocket

- Добавлена отправка сообщения через WebSocket после создания в API
- Используется channel_layer.group_send для рассылки всем участникам
- Сообщение с вложениями теперь появляется в чате мгновенно
- Не требуется перезагрузка страницы

Импорты:
- async_to_sync для синхронного вызова асинхронного кода
- get_channel_layer для доступа к WebSocket
- serialize_message для форматирования данных
This commit is contained in:
admin i 2025-11-28 08:06:45 +03:00
parent 1c040a2c9f
commit 34259a4e46

View File

@ -1,6 +1,8 @@
# backend/api/v1/communications/views.py
"""API views для чатов и сообщений"""
from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer
from django.contrib.auth.decorators import login_required
from django.db import transaction
from django.http import JsonResponse
@ -14,6 +16,7 @@ from communications.models import (
Message,
MessageAttachment,
)
from communications.consumers import serialize_message
@csrf_protect
@ -126,6 +129,22 @@ def upload_message_with_attachments(request):
'mime_type': attachment.mime_type
})
# Отправляем сообщение через WebSocket всем участникам чата
channel_layer = get_channel_layer()
group_name = f"chat_{chat.id}"
# Сериализуем сообщение для WebSocket
message_data = serialize_message(message)
async_to_sync(channel_layer.group_send)(
group_name,
{
"type": "chat.message",
"chat_id": chat.id,
"payload": message_data
}
)
avatar_url = None
if hasattr(request.user, 'avatar') and request.user.avatar:
avatar_url = request.user.avatar.url