diff --git a/src/business/login/login.controller.ts b/src/business/login/login.controller.ts index 4aee6af..7059243 100644 --- a/src/business/login/login.controller.ts +++ b/src/business/login/login.controller.ts @@ -22,7 +22,7 @@ import { Controller, Post, Put, Body, HttpCode, HttpStatus, ValidationPipe, UsePipes, Logger } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse as SwaggerApiResponse, ApiBody } from '@nestjs/swagger'; import { LoginService, ApiResponse, LoginResponse } from './login.service'; -import { LoginDto, RegisterDto, GitHubOAuthDto, ForgotPasswordDto, ResetPasswordDto, ChangePasswordDto } from './login.dto'; +import { LoginDto, RegisterDto, GitHubOAuthDto, ForgotPasswordDto, ResetPasswordDto, ChangePasswordDto, EmailVerificationDto, SendEmailVerificationDto } from './login.dto'; import { LoginResponseDto, RegisterResponseDto, @@ -80,7 +80,7 @@ export class LoginController { */ @ApiOperation({ summary: '用户注册', - description: '创建新用户账户' + description: '创建新用户账户。如果提供邮箱,需要先调用发送验证码接口获取验证码,然后在注册时提供验证码进行验证。' }) @ApiBody({ type: RegisterDto }) @SwaggerApiResponse({ @@ -105,7 +105,8 @@ export class LoginController { password: registerDto.password, nickname: registerDto.nickname, email: registerDto.email, - phone: registerDto.phone + phone: registerDto.phone, + email_verification_code: registerDto.email_verification_code }); } @@ -250,4 +251,96 @@ export class LoginController { changePasswordDto.new_password ); } + + /** + * 发送邮箱验证码 + * + * @param sendEmailVerificationDto 发送验证码数据 + * @returns 发送结果 + */ + @ApiOperation({ + summary: '发送邮箱验证码', + description: '向指定邮箱发送验证码' + }) + @ApiBody({ type: SendEmailVerificationDto }) + @SwaggerApiResponse({ + status: 200, + description: '验证码发送成功', + type: ForgotPasswordResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '请求参数错误' + }) + @SwaggerApiResponse({ + status: 429, + description: '发送频率过高' + }) + @Post('send-email-verification') + @HttpCode(HttpStatus.OK) + @UsePipes(new ValidationPipe({ transform: true })) + async sendEmailVerification(@Body() sendEmailVerificationDto: SendEmailVerificationDto): Promise> { + return await this.loginService.sendEmailVerification(sendEmailVerificationDto.email); + } + + /** + * 验证邮箱验证码 + * + * @param emailVerificationDto 邮箱验证数据 + * @returns 验证结果 + */ + @ApiOperation({ + summary: '验证邮箱验证码', + description: '使用验证码验证邮箱' + }) + @ApiBody({ type: EmailVerificationDto }) + @SwaggerApiResponse({ + status: 200, + description: '邮箱验证成功', + type: CommonResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '验证码错误或已过期' + }) + @Post('verify-email') + @HttpCode(HttpStatus.OK) + @UsePipes(new ValidationPipe({ transform: true })) + async verifyEmail(@Body() emailVerificationDto: EmailVerificationDto): Promise { + return await this.loginService.verifyEmailCode( + emailVerificationDto.email, + emailVerificationDto.verification_code + ); + } + + /** + * 重新发送邮箱验证码 + * + * @param sendEmailVerificationDto 发送验证码数据 + * @returns 发送结果 + */ + @ApiOperation({ + summary: '重新发送邮箱验证码', + description: '重新向指定邮箱发送验证码' + }) + @ApiBody({ type: SendEmailVerificationDto }) + @SwaggerApiResponse({ + status: 200, + description: '验证码重新发送成功', + type: ForgotPasswordResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '邮箱已验证或用户不存在' + }) + @SwaggerApiResponse({ + status: 429, + description: '发送频率过高' + }) + @Post('resend-email-verification') + @HttpCode(HttpStatus.OK) + @UsePipes(new ValidationPipe({ transform: true })) + async resendEmailVerification(@Body() sendEmailVerificationDto: SendEmailVerificationDto): Promise> { + return await this.loginService.resendEmailVerification(sendEmailVerificationDto.email); + } } \ No newline at end of file