81 lines
3.4 KiB
Python
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'] |