From 7d6618155f5268a0cab3b902f5e7aea2e25c52cc Mon Sep 17 00:00:00 2001 From: xoliqberdiyev Date: Tue, 21 Apr 2026 14:45:01 +0500 Subject: [PATCH] change ws response --- core/apps/chat/consumers/chat.py | 40 ++++++++++--------- .../apps/chat/serializers/chat/ChatMessage.py | 3 +- core/apps/chat/tasks/message.py | 6 +-- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/core/apps/chat/consumers/chat.py b/core/apps/chat/consumers/chat.py index d5ecc73..d4278e0 100644 --- a/core/apps/chat/consumers/chat.py +++ b/core/apps/chat/consumers/chat.py @@ -41,7 +41,7 @@ class ChatConsumer(AsyncWebsocketConsumer): async def receive(self, text_data): user = self.scope.get("user") if not user or isinstance(user, AnonymousUser): - await self.close(code=4001) + await self.close(code=401) return try: @@ -53,13 +53,10 @@ class ChatConsumer(AsyncWebsocketConsumer): message_type = data.get("message_type", "text") text = (data.get("text") or "").strip() - # Matn xabari uchun text majburiy if message_type == "text" and not text: await self.send(text_data=json.dumps({"error": "Matn bo'sh bo'lishi mumkin emas."})) return - # WS orqali faqat matn + caption saqlanadi. - # Fayl yuklash uchun REST /chat/messages/ POST ishlatiladi. if message_type != "text": await self.send( text_data=json.dumps( @@ -68,22 +65,29 @@ class ChatConsumer(AsyncWebsocketConsumer): ) return - # DB ga saqlash — post_save signal WS ga broadcast qiladi await self._save_message(user, text) - async def chat_message(self, event): - await self.send( - text_data=json.dumps( - { - "id": event["id"], - "message_type": event["message_type"], - "text": event["text"], - "file_url": event["file_url"], - "sender": event["sender"], - "created_at": event["created_at"], - } - ) - ) + # Uz + # Bu funksiya ishlatilmayapti, shuning uchun commentga olib qoydim, bu funksiya orniga /core/apps/chat/tasks/message.py ichida rest api yordamida message + # yuborilsa ishlatiladigan task bor. + + # En + # This function is not used, so I commented it out. Instead, a task is used in /core/apps/chat/tasks/message.py + # to send message when message is added from REST API. + + # async def chat_message(self, event): + # await self.send( + # text_data=json.dumps( + # { + # "id": event["id"], + # "message_type": event["message_type"], + # "text": event["text"], + # "file_url": event["file_url"], + # "sender": event["sender"], + # "created_at": event["created_at"], + # } + # ) + # ) @database_sync_to_async def _save_message(self, user, text): diff --git a/core/apps/chat/serializers/chat/ChatMessage.py b/core/apps/chat/serializers/chat/ChatMessage.py index 5026a0a..7e717a9 100644 --- a/core/apps/chat/serializers/chat/ChatMessage.py +++ b/core/apps/chat/serializers/chat/ChatMessage.py @@ -78,5 +78,6 @@ class CreateChatmessageSerializer(serializers.ModelSerializer): request = self.context["request"] message = super().create(validated_data) file_url = request.build_absolute_uri(message.file.url) if message.file else None - send_message_to_chat.delay(message.id, file_url) + avatar_url = request.build_absolute_uri(self.context['request'].user.avatar.url) if self.context['request'].user.avatar else None + send_message_to_chat.delay(message.id, file_url, avatar_url) return message diff --git a/core/apps/chat/tasks/message.py b/core/apps/chat/tasks/message.py index 193496e..54e1ce5 100644 --- a/core/apps/chat/tasks/message.py +++ b/core/apps/chat/tasks/message.py @@ -7,7 +7,7 @@ from core.apps.chat.models import ChatmessageModel @shared_task -def send_message_to_chat(message_id, file_url): +def send_message_to_chat(message_id, file_url, avatar_url): try: message = ChatmessageModel.objects.get(id=message_id) except ChatmessageModel.DoesNotExist: @@ -24,12 +24,12 @@ def send_message_to_chat(message_id, file_url): "id": sender_obj.id, "full_name": full_name, "role": sender_obj.role, + "phone": sender_obj.phone, + "avatar": avatar_url, } 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}", {