import { Controller, Post, Body, HttpCode, HttpStatus, UseGuards, } from '@nestjs/common'; import { ThrottlerGuard } from '@nestjs/throttler'; import { SmsService } from '@/application/services'; import { SmsVerificationType } from '@/domain'; class SendSmsDto { phone: string; type: 'REGISTER' | 'LOGIN' | 'RESET_PASSWORD' | 'CHANGE_PHONE'; } class VerifySmsDto { phone: string; code: string; type: 'REGISTER' | 'LOGIN' | 'RESET_PASSWORD' | 'CHANGE_PHONE'; } @Controller('auth/sms') @UseGuards(ThrottlerGuard) export class SmsController { constructor(private readonly smsService: SmsService) {} /** * 发送验证码 * POST /sms/send */ @Post('send') @HttpCode(HttpStatus.OK) async sendCode( @Body() dto: SendSmsDto, ): Promise<{ success: boolean; data: { expiresIn: number } }> { const result = await this.smsService.sendCode({ phone: dto.phone, type: dto.type as SmsVerificationType, }); return { success: true, data: result }; } /** * 验证验证码 * POST /sms/verify */ @Post('verify') @HttpCode(HttpStatus.OK) async verifyCode( @Body() dto: VerifySmsDto, ): Promise<{ success: boolean; data: { valid: boolean } }> { const valid = await this.smsService.verifyCode({ phone: dto.phone, code: dto.code, type: dto.type as SmsVerificationType, }); return { success: true, data: { valid } }; } }