from decimal import Decimal from django.conf import settings from rest_framework import serializers from apps.billing.models import RechargeOrder class GenerateTitleRequestSerializer(serializers.Serializer): prompt = serializers.CharField(trim_whitespace=True, allow_blank=False) model = serializers.CharField( required=False, allow_blank=True, trim_whitespace=True, max_length=64, ) image_url = serializers.URLField(required=False, allow_blank=True) image_base64 = serializers.CharField(required=False, allow_blank=True) resolution = serializers.CharField( required=False, allow_blank=True, trim_whitespace=True, default="1K", ) parameters = serializers.DictField(required=False, default=dict) class GenerateImageRequestSerializer(serializers.Serializer): prompt = serializers.CharField(trim_whitespace=True, allow_blank=False) model = serializers.CharField( required=False, allow_blank=True, trim_whitespace=True, max_length=64, ) image_url = serializers.URLField(required=False, allow_blank=True) image_base64 = serializers.CharField(required=False, allow_blank=True) resolution = serializers.CharField( required=False, allow_blank=True, trim_whitespace=True, default="1K", ) aspect_ratio = serializers.CharField( required=False, allow_blank=True, trim_whitespace=True, default="1:1", ) parameters = serializers.DictField(required=False, default=dict) class RechargeCreateRequestSerializer(serializers.Serializer): amount = serializers.DecimalField( max_digits=12, decimal_places=2, min_value=Decimal("0.01"), ) pay_method = serializers.ChoiceField(choices=RechargeOrder.PayMethod.values) def validate_amount(self, value): max_amount = Decimal(str(settings.RECHARGE_MAX_AMOUNT_CNY)) if value > max_amount: raise serializers.ValidationError(f"单笔充值金额不能超过 {max_amount:.2f} CNY") return value class RechargeStatusRequestSerializer(serializers.Serializer): order_no = serializers.CharField( trim_whitespace=True, allow_blank=False, max_length=64, )