Files
meeting-room/backend/meetings/serializers.py

77 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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'
]
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']