change ws response
This commit is contained in:
@@ -41,7 +41,7 @@ class ChatConsumer(AsyncWebsocketConsumer):
|
|||||||
async def receive(self, text_data):
|
async def receive(self, text_data):
|
||||||
user = self.scope.get("user")
|
user = self.scope.get("user")
|
||||||
if not user or isinstance(user, AnonymousUser):
|
if not user or isinstance(user, AnonymousUser):
|
||||||
await self.close(code=4001)
|
await self.close(code=401)
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -53,13 +53,10 @@ class ChatConsumer(AsyncWebsocketConsumer):
|
|||||||
message_type = data.get("message_type", "text")
|
message_type = data.get("message_type", "text")
|
||||||
text = (data.get("text") or "").strip()
|
text = (data.get("text") or "").strip()
|
||||||
|
|
||||||
# Matn xabari uchun text majburiy
|
|
||||||
if message_type == "text" and not text:
|
if message_type == "text" and not text:
|
||||||
await self.send(text_data=json.dumps({"error": "Matn bo'sh bo'lishi mumkin emas."}))
|
await self.send(text_data=json.dumps({"error": "Matn bo'sh bo'lishi mumkin emas."}))
|
||||||
return
|
return
|
||||||
|
|
||||||
# WS orqali faqat matn + caption saqlanadi.
|
|
||||||
# Fayl yuklash uchun REST /chat/messages/ POST ishlatiladi.
|
|
||||||
if message_type != "text":
|
if message_type != "text":
|
||||||
await self.send(
|
await self.send(
|
||||||
text_data=json.dumps(
|
text_data=json.dumps(
|
||||||
@@ -68,22 +65,29 @@ class ChatConsumer(AsyncWebsocketConsumer):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
# DB ga saqlash — post_save signal WS ga broadcast qiladi
|
|
||||||
await self._save_message(user, text)
|
await self._save_message(user, text)
|
||||||
|
|
||||||
async def chat_message(self, event):
|
# Uz
|
||||||
await self.send(
|
# Bu funksiya ishlatilmayapti, shuning uchun commentga olib qoydim, bu funksiya orniga /core/apps/chat/tasks/message.py ichida rest api yordamida message
|
||||||
text_data=json.dumps(
|
# yuborilsa ishlatiladigan task bor.
|
||||||
{
|
|
||||||
"id": event["id"],
|
# En
|
||||||
"message_type": event["message_type"],
|
# This function is not used, so I commented it out. Instead, a task is used in /core/apps/chat/tasks/message.py
|
||||||
"text": event["text"],
|
# to send message when message is added from REST API.
|
||||||
"file_url": event["file_url"],
|
|
||||||
"sender": event["sender"],
|
# async def chat_message(self, event):
|
||||||
"created_at": event["created_at"],
|
# 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
|
@database_sync_to_async
|
||||||
def _save_message(self, user, text):
|
def _save_message(self, user, text):
|
||||||
|
|||||||
@@ -78,5 +78,6 @@ class CreateChatmessageSerializer(serializers.ModelSerializer):
|
|||||||
request = self.context["request"]
|
request = self.context["request"]
|
||||||
message = super().create(validated_data)
|
message = super().create(validated_data)
|
||||||
file_url = request.build_absolute_uri(message.file.url) if message.file else None
|
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
|
return message
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from core.apps.chat.models import ChatmessageModel
|
|||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def send_message_to_chat(message_id, file_url):
|
def send_message_to_chat(message_id, file_url, avatar_url):
|
||||||
try:
|
try:
|
||||||
message = ChatmessageModel.objects.get(id=message_id)
|
message = ChatmessageModel.objects.get(id=message_id)
|
||||||
except ChatmessageModel.DoesNotExist:
|
except ChatmessageModel.DoesNotExist:
|
||||||
@@ -24,12 +24,12 @@ def send_message_to_chat(message_id, file_url):
|
|||||||
"id": sender_obj.id,
|
"id": sender_obj.id,
|
||||||
"full_name": full_name,
|
"full_name": full_name,
|
||||||
"role": sender_obj.role,
|
"role": sender_obj.role,
|
||||||
|
"phone": sender_obj.phone,
|
||||||
|
"avatar": avatar_url,
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
sender_data = None
|
sender_data = None
|
||||||
|
|
||||||
# file_url = request.build_absolute_uri(message.file.url) if message.file else None
|
|
||||||
|
|
||||||
async_to_sync(channel_layer.group_send)(
|
async_to_sync(channel_layer.group_send)(
|
||||||
f"chat_room_{message.room_id}",
|
f"chat_room_{message.room_id}",
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user