from rest_framework import serializers from .models import ( ModeratorApplication, ModeratorPermission, ModeratorSupport, PermissionRestriction ) class ModeratorApplicationSerializer(serializers.ModelSerializer): """Serializer for ModeratorApplication model.""" status_display = serializers.CharField(source='get_status_display', read_only=True) rank_display = serializers.CharField(source='get_rank_display', read_only=True) applicant_username = serializers.CharField(source='applicant.username', read_only=True) region_name = serializers.CharField(source='region.name', read_only=True) region_path = serializers.SerializerMethodField() is_expired = serializers.BooleanField(read_only=True) class Meta: model = ModeratorApplication fields = ('id', 'applicant', 'applicant_username', 'region', 'region_name', 'region_path', 'support_count', 'deadline', 'status', 'status_display', 'rank', 'is_expired', 'reviewed_by', 'reviewed_at', 'created_at') read_only_fields = ('id', 'created_at', 'reviewed_by', 'reviewed_at') def get_region_path(self, obj): return obj.region.get_full_path() class ModeratorApplicationCreateSerializer(serializers.ModelSerializer): """Serializer for creating moderator applications.""" class Meta: model = ModeratorApplication fields = ('region', 'rank', 'deadline') def create(self, validated_data): validated_data['applicant'] = self.context['request'].user return super().create(validated_data) class ModeratorPermissionSerializer(serializers.ModelSerializer): """Serializer for ModeratorPermission model.""" status_display = serializers.CharField(source='get_status_display', read_only=True) rank_display = serializers.CharField(source='get_rank_display', read_only=True) moderator_username = serializers.CharField(source='moderator.username', read_only=True) region_name = serializers.CharField(source='region.name', read_only=True) is_active = serializers.BooleanField(read_only=True) class Meta: model = ModeratorPermission fields = ('id', 'moderator', 'moderator_username', 'region', 'region_name', 'rank', 'rank_display', 'status', 'status_display', 'is_active', 'restricted_until', 'created_at') read_only_fields = ('id', 'created_at') class ModeratorSupportSerializer(serializers.ModelSerializer): """Serializer for ModeratorSupport model.""" supporter_username = serializers.CharField(source='supporter.username', read_only=True) application_region_name = serializers.CharField(source='application.region.name', read_only=True) class Meta: model = ModeratorSupport fields = ('id', 'supporter', 'supporter_username', 'application', 'application_region_name', 'created_at') read_only_fields = ('id', 'created_at') def create(self, validated_data): validated_data['supporter'] = self.context['request'].user # Increment support count application = validated_data['application'] application.support_count += 1 application.save() return super().create(validated_data) class PermissionRestrictionSerializer(serializers.ModelSerializer): """Serializer for PermissionRestriction model.""" restriction_type_display = serializers.CharField(source='get_restriction_type_display', read_only=True) operator_username = serializers.CharField(source='operator.username', read_only=True) target_moderator_username = serializers.CharField(source='target_moderator.username', read_only=True) class Meta: model = PermissionRestriction fields = ('id', 'operator', 'operator_username', 'target_moderator', 'target_moderator_username', 'restriction_type', 'restriction_type_display', 'start_time', 'end_time', 'created_at') read_only_fields = ('id', 'created_at')