from django.db import models from django.conf import settings from apps.regions.models import Region class ModeratorApplication(models.Model): """Model for moderator applications.""" STATUS_CHOICES = [ ('pending', '待审核'), ('approved', '已通过'), ('rejected', '已拒绝'), ('cancelled', '已取消'), ] RANK_CHOICES = [ ('general', '将军'), ('colonel', '校官'), ('captain', '尉官'), ('soldier', '士兵'), ] applicant = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='moderator_applications', verbose_name='申请者' ) region = models.ForeignKey( Region, on_delete=models.CASCADE, related_name='moderator_applications', verbose_name='申请的版块' ) support_count = models.IntegerField(default=0, verbose_name='支持人数') deadline = models.DateTimeField(verbose_name='截止时间') status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name='状态') rank = models.CharField(max_length=20, choices=RANK_CHOICES, verbose_name='军衔级别') reviewed_by = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name='reviewed_applications', verbose_name='审核人' ) reviewed_at = models.DateTimeField(null=True, blank=True, verbose_name='审核时间') created_at = models.DateTimeField(auto_now_add=True, verbose_name='申请时间') class Meta: db_table = 'moderator_applications' verbose_name = '版主申请' verbose_name_plural = '版主申请' ordering = ['-created_at'] def __str__(self): return f'{self.applicant.username} - {self.region.name} ({self.get_status_display()})' def is_expired(self): """Check if the application has expired.""" from django.utils import timezone return timezone.now() > self.deadline def has_enough_support(self): """Check if the application has enough support.""" # TODO: Define minimum support count return self.support_count >= 10 class ModeratorPermission(models.Model): """Model for moderator permissions.""" PERMISSION_STATUS_CHOICES = [ ('active', '正常'), ('restricted', '限制'), ('revoked', '取消'), ] RANK_CHOICES = [ ('general', '将军'), ('colonel', '校官'), ('captain', '尉官'), ('soldier', '士兵'), ] moderator = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='moderator_permissions', verbose_name='版主' ) region = models.ForeignKey( Region, on_delete=models.CASCADE, related_name='moderator_permissions', verbose_name='管辖版块' ) rank = models.CharField(max_length=20, choices=RANK_CHOICES, verbose_name='军衔级别') status = models.CharField( max_length=20, choices=PERMISSION_STATUS_CHOICES, default='active', verbose_name='权限状态' ) created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') restricted_until = models.DateTimeField(null=True, blank=True, verbose_name='限制结束时间') class Meta: db_table = 'moderator_permissions' verbose_name = '版主权限' verbose_name_plural = '版主权限' ordering = ['-created_at'] def __str__(self): return f'{self.moderator.username} - {self.region.name} ({self.get_status_display()})' def is_active(self): """Check if the permission is currently active.""" from django.utils import timezone if self.status != 'active': return False if self.restricted_until and timezone.now() < self.restricted_until: return False return True class ModeratorSupport(models.Model): """Model for moderator application supports.""" supporter = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='supported_applications', verbose_name='支持者' ) application = models.ForeignKey( ModeratorApplication, on_delete=models.CASCADE, related_name='supports', verbose_name='版主申请' ) created_at = models.DateTimeField(auto_now_add=True, verbose_name='支持时间') class Meta: db_table = 'moderator_supports' verbose_name = '版主支持' verbose_name_plural = '版主支持' unique_together = ['supporter', 'application'] def __str__(self): return f'{self.supporter.username} supports {self.application.region.name}' class PermissionRestriction(models.Model): """Model for permission restrictions.""" RESTRICTION_TYPE_CHOICES = [ ('partial', '部分限制'), ('full', '完全限制'), ] operator = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='created_restrictions', verbose_name='操作者' ) target_moderator = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='received_restrictions', verbose_name='被限制版主' ) restriction_type = models.CharField( max_length=20, choices=RESTRICTION_TYPE_CHOICES, verbose_name='限制类型' ) start_time = models.DateTimeField(verbose_name='限制开始时间') end_time = models.DateTimeField(verbose_name='限制结束时间') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') class Meta: db_table = 'permission_restrictions' verbose_name = '权限限制' verbose_name_plural = '权限限制' ordering = ['-created_at'] def __str__(self): return f'{self.operator.username} restricted {self.target_moderator.username} ({self.get_restriction_type_display()})'