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)
|
||||
68
core/apps/chat/serializers/chat/ChatRoom.py
Normal file
68
core/apps/chat/serializers/chat/ChatRoom.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.chat.models import ChatroomModel
|
||||
|
||||
|
||||
class MemberSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
full_name = serializers.SerializerMethodField()
|
||||
role = serializers.CharField()
|
||||
|
||||
def get_full_name(self, obj):
|
||||
name = obj.get_full_name().strip()
|
||||
return name if name else str(obj.phone)
|
||||
|
||||
|
||||
class BaseChatroomSerializer(serializers.ModelSerializer):
|
||||
members = serializers.SerializerMethodField()
|
||||
|
||||
def get_members(self, obj):
|
||||
return [
|
||||
{
|
||||
"id": u.id,
|
||||
"full_name": (u.get_full_name().strip() or str(u.phone)),
|
||||
"role": u.role,
|
||||
}
|
||||
for u in obj.members.only("id", "first_name", "last_name", "phone", "role")
|
||||
]
|
||||
|
||||
class Meta:
|
||||
model = ChatroomModel
|
||||
fields = [
|
||||
"id",
|
||||
"type",
|
||||
"auto_evaluation",
|
||||
"members",
|
||||
"created_at",
|
||||
]
|
||||
|
||||
|
||||
class ListChatroomSerializer(BaseChatroomSerializer):
|
||||
class Meta(BaseChatroomSerializer.Meta): ...
|
||||
|
||||
|
||||
class RetrieveChatroomSerializer(BaseChatroomSerializer):
|
||||
class Meta(BaseChatroomSerializer.Meta): ...
|
||||
|
||||
|
||||
class CreateChatroomSerializer(serializers.ModelSerializer):
|
||||
type = serializers.ChoiceField(
|
||||
choices=["auto_evaluation", "direct"],
|
||||
required=True,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ChatroomModel
|
||||
fields = [
|
||||
"type",
|
||||
"auto_evaluation",
|
||||
"members",
|
||||
]
|
||||
|
||||
def validate(self, attrs):
|
||||
room_type = attrs.get("type")
|
||||
if room_type == "auto_evaluation" and not attrs.get("auto_evaluation"):
|
||||
raise serializers.ValidationError(
|
||||
{"auto_evaluation": "auto_evaluation turi uchun AutoEvaluation majburiy."}
|
||||
)
|
||||
return attrs
|
||||
2
core/apps/chat/serializers/chat/__init__.py
Normal file
2
core/apps/chat/serializers/chat/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from .ChatMessage import * # noqa
|
||||
from .ChatRoom import * # noqa
|
||||
Reference in New Issue
Block a user