from django.contrib.auth.models import AbstractUser from django.db import models class Team(models.Model): """团队模型 — 额度管理的核心单位。""" name = models.CharField(max_length=100, unique=True, verbose_name='团队名称') total_seconds_pool = models.BigIntegerField(default=0, verbose_name='总额度池(秒)') total_seconds_used = models.FloatField(default=0, verbose_name='已消耗总秒数') monthly_seconds_limit = models.IntegerField(default=6000, verbose_name='每月消费上限(秒)') daily_member_limit_default = models.IntegerField(default=600, verbose_name='新成员默认每日限额(秒)') is_active = models.BooleanField(default=True, verbose_name='启用状态') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: verbose_name = '团队' verbose_name_plural = '团队' def __str__(self): return self.name @property def remaining_seconds(self): return self.total_seconds_pool - self.total_seconds_used class User(AbstractUser): """Extended user model — Phase 5: team-based quota.""" email = models.EmailField(unique=True, verbose_name='邮箱') team = models.ForeignKey( Team, on_delete=models.SET_NULL, null=True, blank=True, related_name='members', verbose_name='所属团队', ) is_team_admin = models.BooleanField(default=False, verbose_name='团队管理员') daily_seconds_limit = models.IntegerField(default=600, verbose_name='每日秒数上限') monthly_seconds_limit = models.IntegerField(default=6000, verbose_name='每月秒数上限') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: verbose_name = '用户' verbose_name_plural = '用户' def __str__(self): return self.username @property def role(self): if self.is_staff and self.team is None: return 'super_admin' if self.is_team_admin and self.team is not None: return 'team_admin' return 'member'