| 1234567891011121314151617181920212223242526272829303132333435 |
- /**
- * 充值请求 DTO - 用户发起充值订单
- */
- import { IsInt, IsOptional, IsString, IsIn, Min } from 'class-validator';
- import { Transform } from 'class-transformer';
- /** 支持的支付渠道白名单 */
- const ALLOWED_PROVIDERS = ['mock', 'stripe', 'paypal', 'momo', 'zalopay', 'alipay'] as const;
- export class DepositDto {
- /** 充值金额(美分),最小 100 = $1.00 */
- @IsInt({ message: 'amountCents 必须为整数(美分单位)' })
- @Min(100, { message: '最低充值金额为 $1.00(100 美分)' })
- @Transform(({ value }: { value: unknown }) => {
- // 允许字符串数字自动转换(class-validator + transform: true)
- if (typeof value === 'string') {
- const parsed = parseInt(value, 10);
- if (!isNaN(parsed)) return parsed;
- }
- return value;
- })
- amountCents!: number;
- /** 货币,默认 USD */
- @IsOptional()
- @IsString()
- @IsIn(['USD', 'VND'], { message: 'currency 仅支持 USD 或 VND' })
- currency?: string = 'USD';
- /** 支付渠道,默认从环境变量 PAYMENT_PROVIDER 读取,fallback 为 mock */
- @IsOptional()
- @IsString()
- @IsIn(ALLOWED_PROVIDERS, { message: 'provider 不支持,可用: ' + ALLOWED_PROVIDERS.join(', ') })
- provider?: string;
- }
|