from rest_framework import serializers from .models import Meeting, Participant, Message, MeetingMinutes from django.contrib.auth import get_user_model User = get_user_model() class UserSerializer(serializers.ModelSerializer): """用户序列化器""" class Meta: model = User fields = ['id', 'username', 'email', 'created_at'] class MeetingSerializer(serializers.ModelSerializer): """会议室序列化器""" host_name = serializers.CharField(source='host.username', read_only=True) participant_count = serializers.SerializerMethodField() class Meta: model = Meeting fields = [ 'id', 'topic', 'host', 'host_name', 'status', 'invite_code', 'created_at', 'started_at', 'ended_at', 'participant_count', 'host_agent_id', 'host_instance_id', 'minutes_generated', 'minutes_uploaded_at' ] read_only_fields = ['host', 'invite_code', 'status'] def get_participant_count(self, obj): return obj.participants.filter(left_at__isnull=True).count() def create(self, validated_data): # 使用第一个用户作为 host(临时方案) host = User.objects.first() validated_data['host'] = host return super().create(validated_data) class ParticipantSerializer(serializers.ModelSerializer): """参会者序列化器""" class Meta: model = Participant fields = [ 'id', 'meeting', 'user', 'agent_type', 'agent_id', 'agent_name', 'agent_emoji', 'nickname', 'is_host', 'joined_at', 'api_key' ] read_only_fields = ['api_key', 'joined_at'] class MessageSerializer(serializers.ModelSerializer): """消息序列化器""" sender_name = serializers.CharField(source='sender.nickname', read_only=True) sender_emoji = serializers.CharField(source='sender.agent_emoji', read_only=True) class Meta: model = Message fields = [ 'id', 'meeting', 'sender', 'sender_name', 'sender_emoji', 'content', 'created_at', 'is_broadcast', 'requires_response', 'in_reply_to', 'read_by' ] read_only_fields = ['sender', 'created_at'] class InboxSerializer(serializers.Serializer): """信箱序列化器""" unread_count = serializers.IntegerField() messages = MessageSerializer(many=True) class MeetingMinutesSerializer(serializers.ModelSerializer): """会议纪要序列化器""" class Meta: model = MeetingMinutes fields = ['meeting', 'content', 'generated_at', 'exported_at'] read_only_fields = ['meeting', 'generated_at']