92 lines
3.9 KiB
Python
92 lines
3.9 KiB
Python
|
|
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')
|