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)