chat qo'shildi
This commit is contained in:
75
core/apps/chat/serializers/chat/ChatMessage.py
Normal file
75
core/apps/chat/serializers/chat/ChatMessage.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.chat.models import ChatmessageModel
|
||||
|
||||
|
||||
class BaseChatmessageSerializer(serializers.ModelSerializer):
|
||||
sender = serializers.SerializerMethodField()
|
||||
file_url = serializers.SerializerMethodField()
|
||||
|
||||
def get_sender(self, obj):
|
||||
if obj.sender is None:
|
||||
return None
|
||||
full_name = obj.sender.get_full_name().strip()
|
||||
if not full_name:
|
||||
full_name = str(obj.sender.phone)
|
||||
return {
|
||||
"id": obj.sender.id,
|
||||
"full_name": full_name,
|
||||
"role": obj.sender.role,
|
||||
}
|
||||
|
||||
def get_file_url(self, obj):
|
||||
if not obj.file:
|
||||
return None
|
||||
request = self.context.get("request")
|
||||
if request:
|
||||
return request.build_absolute_uri(obj.file.url)
|
||||
return obj.file.url
|
||||
|
||||
class Meta:
|
||||
model = ChatmessageModel
|
||||
fields = [
|
||||
"id",
|
||||
"room",
|
||||
"sender",
|
||||
"message_type",
|
||||
"text",
|
||||
"file_url",
|
||||
"is_read",
|
||||
"created_at",
|
||||
]
|
||||
|
||||
|
||||
class ListChatmessageSerializer(BaseChatmessageSerializer):
|
||||
class Meta(BaseChatmessageSerializer.Meta): ...
|
||||
|
||||
|
||||
class RetrieveChatmessageSerializer(BaseChatmessageSerializer):
|
||||
class Meta(BaseChatmessageSerializer.Meta): ...
|
||||
|
||||
|
||||
class CreateChatmessageSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ChatmessageModel
|
||||
fields = [
|
||||
"room",
|
||||
"message_type",
|
||||
"text",
|
||||
"file",
|
||||
]
|
||||
|
||||
def validate(self, attrs):
|
||||
message_type = attrs.get("message_type", "text")
|
||||
text = attrs.get("text", "").strip() if attrs.get("text") else ""
|
||||
file = attrs.get("file")
|
||||
|
||||
if message_type == "text" and not text:
|
||||
raise serializers.ValidationError({"text": "Matn xabari uchun text majburiy."})
|
||||
if message_type != "text" and not file:
|
||||
raise serializers.ValidationError({"file": f"{message_type} xabari uchun fayl majburiy."})
|
||||
return attrs
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data["sender"] = self.context["request"].user
|
||||
return super().create(validated_data)
|
||||
Reference in New Issue
Block a user