add new task for sending new messages to the chat
This commit is contained in:
44
core/apps/chat/tasks/message.py
Normal file
44
core/apps/chat/tasks/message.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from asgiref.sync import async_to_sync
|
||||
from channels.layers import get_channel_layer
|
||||
|
||||
from celery import shared_task
|
||||
|
||||
from core.apps.chat.models import ChatmessageModel
|
||||
|
||||
|
||||
@shared_task
|
||||
def send_message_to_chat(message_id, request):
|
||||
try:
|
||||
message = ChatmessageModel.objects.get(id=message_id)
|
||||
except ChatmessageModel.DoesNotExist:
|
||||
return "Not found"
|
||||
|
||||
channel_layer = get_channel_layer()
|
||||
if channel_layer is None:
|
||||
return
|
||||
|
||||
sender_obj = message.sender
|
||||
if sender_obj:
|
||||
full_name = sender_obj.get_full_name().strip() or str(sender_obj.phone)
|
||||
sender_data = {
|
||||
"id": sender_obj.id,
|
||||
"full_name": full_name,
|
||||
"role": sender_obj.role,
|
||||
}
|
||||
else:
|
||||
sender_data = None
|
||||
|
||||
file_url = request.build_absolute_uri(message.file.url) if message.file else None
|
||||
|
||||
async_to_sync(channel_layer.group_send)(
|
||||
f"chat_room_{message.room_id}",
|
||||
{
|
||||
"type": "chat_message",
|
||||
"id": message.id,
|
||||
"message_type": message.message_type,
|
||||
"text": message.text,
|
||||
"file_url": file_url,
|
||||
"sender": sender_data,
|
||||
"created_at": message.created_at.isoformat(),
|
||||
},
|
||||
)
|
||||
Reference in New Issue
Block a user