40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from drf_spectacular.utils import extend_schema_field
|
|
from rest_framework import serializers
|
|
|
|
from apps.chat.models import Conversation, ConversationParticipant
|
|
|
|
|
|
class CreateConversationSerializer(serializers.Serializer):
|
|
user_1_uuid = serializers.UUIDField()
|
|
user_2_uuid = serializers.UUIDField()
|
|
|
|
|
|
class ConversationUserActionSerializer(serializers.Serializer):
|
|
user_uuid = serializers.UUIDField()
|
|
|
|
|
|
class ConversationSerializer(serializers.ModelSerializer):
|
|
participants = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Conversation
|
|
fields = ["uuid", "type", "status", "closed_by_uuid", "created_at", "participants"]
|
|
|
|
@extend_schema_field(serializers.ListField(child=serializers.UUIDField()))
|
|
def get_participants(self, obj):
|
|
return list(
|
|
ConversationParticipant.objects.filter(conversation_id=obj.uuid)
|
|
.order_by("joined_at")
|
|
.values_list("user_uuid", flat=True)
|
|
)
|
|
|
|
|
|
class ConversationListSerializer(serializers.Serializer):
|
|
uuid = serializers.UUIDField()
|
|
type = serializers.CharField()
|
|
status = serializers.CharField()
|
|
closed_by_uuid = serializers.UUIDField(allow_null=True)
|
|
created_at = serializers.DateTimeField()
|
|
participants = serializers.ListField(child=serializers.UUIDField())
|
|
has_unread = serializers.BooleanField()
|
|
last_message = serializers.DictField(allow_null=True, required=False)
|