from rest_framework import serializers from .models import User, UserToken, UserActivityLog, AnnotationStats, AnnotationQuality class UserSerializer(serializers.ModelSerializer): """用户序列化器""" class Meta: model = User fields = ['id', 'email', 'username', 'company', 'name', 'full_name', 'role', 'profile_image', 'is_first_login', 'last_login', 'is_active', 'created_at', 'updated_at'] read_only_fields = ['id', 'created_at', 'updated_at', 'last_login'] class UserCreateSerializer(serializers.ModelSerializer): """用户创建序列化器""" password = serializers.CharField(write_only=True, required=True, style={'input_type': 'password'}) class Meta: model = User fields = ['email', 'password', 'username', 'company', 'name', 'full_name', 'role'] def create(self, validated_data): return User.objects.create_user(**validated_data) class UserUpdateSerializer(serializers.ModelSerializer): """用户更新序列化器""" password = serializers.CharField(write_only=True, required=False, style={'input_type': 'password'}) class Meta: model = User fields = ['email', 'password', 'username', 'company', 'name', 'full_name', 'profile_image'] read_only_fields = ['email'] def update(self, instance, validated_data): password = validated_data.pop('password', None) user = super().update(instance, validated_data) if password: user.set_password(password) user.save() return user class UserTokenSerializer(serializers.ModelSerializer): """用户令牌序列化器""" user = UserSerializer(read_only=True) is_expired = serializers.BooleanField(read_only=True, source='is_expired') class Meta: model = UserToken fields = ['id', 'user', 'token', 'created_at', 'expired_at', 'last_accessed', 'ip_address', 'user_agent', 'is_expired'] read_only_fields = ['id', 'user', 'token', 'created_at', 'expired_at', 'last_accessed'] class UserActivityLogSerializer(serializers.ModelSerializer): """用户活动日志序列化器""" user = UserSerializer(read_only=True) class Meta: model = UserActivityLog fields = ['id', 'user', 'action_type', 'target_type', 'target_id', 'details', 'ip_address', 'user_agent', 'created_at'] read_only_fields = ['id', 'created_at'] class AnnotationStatsSerializer(serializers.ModelSerializer): """标注统计序列化器""" user = UserSerializer(read_only=True) class Meta: model = AnnotationStats fields = ['id', 'user', 'date', 'total_annotations', 'positive_annotations', 'negative_annotations', 'conversations_count', 'messages_count', 'created_at', 'updated_at'] read_only_fields = ['id', 'created_at', 'updated_at'] class AnnotationQualitySerializer(serializers.ModelSerializer): """标注质量序列化器""" user = UserSerializer(read_only=True) reviewer = UserSerializer(read_only=True) class Meta: model = AnnotationQuality fields = ['id', 'user', 'message_id', 'quality_score', 'consistency_score', 'review_status', 'reviewer', 'review_notes', 'created_at', 'reviewed_at'] read_only_fields = ['id', 'created_at', 'reviewed_at']