from rest_framework import serializers class VideoGenerateSerializer(serializers.Serializer): prompt = serializers.CharField(required=False, allow_blank=True, default='') mode = serializers.ChoiceField(choices=['universal', 'keyframe']) model = serializers.ChoiceField(choices=['seedance_2.0', 'seedance_2.0_fast']) aspect_ratio = serializers.CharField(max_length=10) duration = serializers.IntegerField() references = serializers.ListField(child=serializers.DictField(), required=False, default=list) class QuotaUpdateSerializer(serializers.Serializer): daily_seconds_limit = serializers.IntegerField(min_value=-1) monthly_seconds_limit = serializers.IntegerField(min_value=-1) class UserStatusSerializer(serializers.Serializer): is_active = serializers.BooleanField() class AdminCreateUserSerializer(serializers.Serializer): username = serializers.CharField(max_length=150) email = serializers.EmailField() password = serializers.CharField(min_length=6) daily_seconds_limit = serializers.IntegerField(min_value=-1, required=False, default=600) monthly_seconds_limit = serializers.IntegerField(min_value=-1, required=False, default=6000) is_staff = serializers.BooleanField(required=False, default=False) class SystemSettingsSerializer(serializers.Serializer): default_daily_seconds_limit = serializers.IntegerField(min_value=0) default_monthly_seconds_limit = serializers.IntegerField(min_value=0) announcement = serializers.CharField(required=False, allow_blank=True, default='') announcement_enabled = serializers.BooleanField(required=False, default=False) # ── Team serializers ── class TeamCreateSerializer(serializers.Serializer): name = serializers.CharField(max_length=100) monthly_seconds_limit = serializers.IntegerField(min_value=0, required=False, default=6000) daily_member_limit_default = serializers.IntegerField(min_value=0, required=False, default=600) class TeamUpdateSerializer(serializers.Serializer): name = serializers.CharField(max_length=100, required=False) monthly_seconds_limit = serializers.IntegerField(min_value=0, required=False) daily_member_limit_default = serializers.IntegerField(min_value=0, required=False) is_active = serializers.BooleanField(required=False) class TeamTopUpSerializer(serializers.Serializer): seconds = serializers.IntegerField(min_value=1) class TeamAdminCreateSerializer(serializers.Serializer): """Create a team admin account for a specific team.""" username = serializers.CharField(max_length=150) email = serializers.EmailField() password = serializers.CharField(min_length=6) class TeamMemberCreateSerializer(serializers.Serializer): """Team admin creates a member.""" username = serializers.CharField(max_length=150) password = serializers.CharField(min_length=6) daily_seconds_limit = serializers.IntegerField(min_value=-1, required=False) monthly_seconds_limit = serializers.IntegerField(min_value=-1, required=False) class MemberQuotaSerializer(serializers.Serializer): daily_seconds_limit = serializers.IntegerField(min_value=-1) monthly_seconds_limit = serializers.IntegerField(min_value=-1)