diff --git a/src/business/login/login.controller.ts b/src/business/login/login.controller.ts index 7196805..4aee6af 100644 --- a/src/business/login/login.controller.ts +++ b/src/business/login/login.controller.ts @@ -20,9 +20,18 @@ */ 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 { + LoginResponseDto, + RegisterResponseDto, + GitHubOAuthResponseDto, + ForgotPasswordResponseDto, + CommonResponseDto +} from './login-response.dto'; +@ApiTags('auth') @Controller('auth') export class LoginController { private readonly logger = new Logger(LoginController.name); @@ -35,6 +44,24 @@ export class LoginController { * @param loginDto 登录数据 * @returns 登录结果 */ + @ApiOperation({ + summary: '用户登录', + description: '支持用户名、邮箱或手机号登录' + }) + @ApiBody({ type: LoginDto }) + @SwaggerApiResponse({ + status: 200, + description: '登录成功', + type: LoginResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '请求参数错误' + }) + @SwaggerApiResponse({ + status: 401, + description: '用户名或密码错误' + }) @Post('login') @HttpCode(HttpStatus.OK) @UsePipes(new ValidationPipe({ transform: true })) @@ -51,6 +78,24 @@ export class LoginController { * @param registerDto 注册数据 * @returns 注册结果 */ + @ApiOperation({ + summary: '用户注册', + description: '创建新用户账户' + }) + @ApiBody({ type: RegisterDto }) + @SwaggerApiResponse({ + status: 201, + description: '注册成功', + type: RegisterResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '请求参数错误' + }) + @SwaggerApiResponse({ + status: 409, + description: '用户名或邮箱已存在' + }) @Post('register') @HttpCode(HttpStatus.CREATED) @UsePipes(new ValidationPipe({ transform: true })) @@ -70,6 +115,24 @@ export class LoginController { * @param githubDto GitHub OAuth数据 * @returns 登录结果 */ + @ApiOperation({ + summary: 'GitHub OAuth登录', + description: '使用GitHub账户登录或注册' + }) + @ApiBody({ type: GitHubOAuthDto }) + @SwaggerApiResponse({ + status: 200, + description: 'GitHub登录成功', + type: GitHubOAuthResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '请求参数错误' + }) + @SwaggerApiResponse({ + status: 401, + description: 'GitHub认证失败' + }) @Post('github') @HttpCode(HttpStatus.OK) @UsePipes(new ValidationPipe({ transform: true })) @@ -89,6 +152,24 @@ export class LoginController { * @param forgotPasswordDto 忘记密码数据 * @returns 发送结果 */ + @ApiOperation({ + summary: '发送密码重置验证码', + description: '向用户邮箱或手机发送密码重置验证码' + }) + @ApiBody({ type: ForgotPasswordDto }) + @SwaggerApiResponse({ + status: 200, + description: '验证码发送成功', + type: ForgotPasswordResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '请求参数错误' + }) + @SwaggerApiResponse({ + status: 404, + description: '用户不存在' + }) @Post('forgot-password') @HttpCode(HttpStatus.OK) @UsePipes(new ValidationPipe({ transform: true })) @@ -102,6 +183,24 @@ export class LoginController { * @param resetPasswordDto 重置密码数据 * @returns 重置结果 */ + @ApiOperation({ + summary: '重置密码', + description: '使用验证码重置用户密码' + }) + @ApiBody({ type: ResetPasswordDto }) + @SwaggerApiResponse({ + status: 200, + description: '密码重置成功', + type: CommonResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '请求参数错误或验证码无效' + }) + @SwaggerApiResponse({ + status: 404, + description: '用户不存在' + }) @Post('reset-password') @HttpCode(HttpStatus.OK) @UsePipes(new ValidationPipe({ transform: true })) @@ -119,6 +218,24 @@ export class LoginController { * @param changePasswordDto 修改密码数据 * @returns 修改结果 */ + @ApiOperation({ + summary: '修改密码', + description: '用户修改自己的密码(需要提供旧密码)' + }) + @ApiBody({ type: ChangePasswordDto }) + @SwaggerApiResponse({ + status: 200, + description: '密码修改成功', + type: CommonResponseDto + }) + @SwaggerApiResponse({ + status: 400, + description: '请求参数错误或旧密码不正确' + }) + @SwaggerApiResponse({ + status: 404, + description: '用户不存在' + }) @Put('change-password') @HttpCode(HttpStatus.OK) @UsePipes(new ValidationPipe({ transform: true }))