daren/apps/user/serializers.py
2025-06-09 16:29:14 +08:00

81 lines
3.4 KiB
Python

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']