api:为登录控制器添加完整的Swagger文档
- 添加ApiTags、ApiOperation等装饰器 - 配置详细的请求和响应文档 - 提供HTTP状态码和错误处理说明
This commit is contained in:
@@ -20,9 +20,18 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Controller, Post, Put, Body, HttpCode, HttpStatus, ValidationPipe, UsePipes, Logger } from '@nestjs/common';
|
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 { LoginService, ApiResponse, LoginResponse } from './login.service';
|
||||||
import { LoginDto, RegisterDto, GitHubOAuthDto, ForgotPasswordDto, ResetPasswordDto, ChangePasswordDto } from './login.dto';
|
import { LoginDto, RegisterDto, GitHubOAuthDto, ForgotPasswordDto, ResetPasswordDto, ChangePasswordDto } from './login.dto';
|
||||||
|
import {
|
||||||
|
LoginResponseDto,
|
||||||
|
RegisterResponseDto,
|
||||||
|
GitHubOAuthResponseDto,
|
||||||
|
ForgotPasswordResponseDto,
|
||||||
|
CommonResponseDto
|
||||||
|
} from './login-response.dto';
|
||||||
|
|
||||||
|
@ApiTags('auth')
|
||||||
@Controller('auth')
|
@Controller('auth')
|
||||||
export class LoginController {
|
export class LoginController {
|
||||||
private readonly logger = new Logger(LoginController.name);
|
private readonly logger = new Logger(LoginController.name);
|
||||||
@@ -35,6 +44,24 @@ export class LoginController {
|
|||||||
* @param loginDto 登录数据
|
* @param loginDto 登录数据
|
||||||
* @returns 登录结果
|
* @returns 登录结果
|
||||||
*/
|
*/
|
||||||
|
@ApiOperation({
|
||||||
|
summary: '用户登录',
|
||||||
|
description: '支持用户名、邮箱或手机号登录'
|
||||||
|
})
|
||||||
|
@ApiBody({ type: LoginDto })
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 200,
|
||||||
|
description: '登录成功',
|
||||||
|
type: LoginResponseDto
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 400,
|
||||||
|
description: '请求参数错误'
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 401,
|
||||||
|
description: '用户名或密码错误'
|
||||||
|
})
|
||||||
@Post('login')
|
@Post('login')
|
||||||
@HttpCode(HttpStatus.OK)
|
@HttpCode(HttpStatus.OK)
|
||||||
@UsePipes(new ValidationPipe({ transform: true }))
|
@UsePipes(new ValidationPipe({ transform: true }))
|
||||||
@@ -51,6 +78,24 @@ export class LoginController {
|
|||||||
* @param registerDto 注册数据
|
* @param registerDto 注册数据
|
||||||
* @returns 注册结果
|
* @returns 注册结果
|
||||||
*/
|
*/
|
||||||
|
@ApiOperation({
|
||||||
|
summary: '用户注册',
|
||||||
|
description: '创建新用户账户'
|
||||||
|
})
|
||||||
|
@ApiBody({ type: RegisterDto })
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 201,
|
||||||
|
description: '注册成功',
|
||||||
|
type: RegisterResponseDto
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 400,
|
||||||
|
description: '请求参数错误'
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 409,
|
||||||
|
description: '用户名或邮箱已存在'
|
||||||
|
})
|
||||||
@Post('register')
|
@Post('register')
|
||||||
@HttpCode(HttpStatus.CREATED)
|
@HttpCode(HttpStatus.CREATED)
|
||||||
@UsePipes(new ValidationPipe({ transform: true }))
|
@UsePipes(new ValidationPipe({ transform: true }))
|
||||||
@@ -70,6 +115,24 @@ export class LoginController {
|
|||||||
* @param githubDto GitHub OAuth数据
|
* @param githubDto GitHub OAuth数据
|
||||||
* @returns 登录结果
|
* @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')
|
@Post('github')
|
||||||
@HttpCode(HttpStatus.OK)
|
@HttpCode(HttpStatus.OK)
|
||||||
@UsePipes(new ValidationPipe({ transform: true }))
|
@UsePipes(new ValidationPipe({ transform: true }))
|
||||||
@@ -89,6 +152,24 @@ export class LoginController {
|
|||||||
* @param forgotPasswordDto 忘记密码数据
|
* @param forgotPasswordDto 忘记密码数据
|
||||||
* @returns 发送结果
|
* @returns 发送结果
|
||||||
*/
|
*/
|
||||||
|
@ApiOperation({
|
||||||
|
summary: '发送密码重置验证码',
|
||||||
|
description: '向用户邮箱或手机发送密码重置验证码'
|
||||||
|
})
|
||||||
|
@ApiBody({ type: ForgotPasswordDto })
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 200,
|
||||||
|
description: '验证码发送成功',
|
||||||
|
type: ForgotPasswordResponseDto
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 400,
|
||||||
|
description: '请求参数错误'
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 404,
|
||||||
|
description: '用户不存在'
|
||||||
|
})
|
||||||
@Post('forgot-password')
|
@Post('forgot-password')
|
||||||
@HttpCode(HttpStatus.OK)
|
@HttpCode(HttpStatus.OK)
|
||||||
@UsePipes(new ValidationPipe({ transform: true }))
|
@UsePipes(new ValidationPipe({ transform: true }))
|
||||||
@@ -102,6 +183,24 @@ export class LoginController {
|
|||||||
* @param resetPasswordDto 重置密码数据
|
* @param resetPasswordDto 重置密码数据
|
||||||
* @returns 重置结果
|
* @returns 重置结果
|
||||||
*/
|
*/
|
||||||
|
@ApiOperation({
|
||||||
|
summary: '重置密码',
|
||||||
|
description: '使用验证码重置用户密码'
|
||||||
|
})
|
||||||
|
@ApiBody({ type: ResetPasswordDto })
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 200,
|
||||||
|
description: '密码重置成功',
|
||||||
|
type: CommonResponseDto
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 400,
|
||||||
|
description: '请求参数错误或验证码无效'
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 404,
|
||||||
|
description: '用户不存在'
|
||||||
|
})
|
||||||
@Post('reset-password')
|
@Post('reset-password')
|
||||||
@HttpCode(HttpStatus.OK)
|
@HttpCode(HttpStatus.OK)
|
||||||
@UsePipes(new ValidationPipe({ transform: true }))
|
@UsePipes(new ValidationPipe({ transform: true }))
|
||||||
@@ -119,6 +218,24 @@ export class LoginController {
|
|||||||
* @param changePasswordDto 修改密码数据
|
* @param changePasswordDto 修改密码数据
|
||||||
* @returns 修改结果
|
* @returns 修改结果
|
||||||
*/
|
*/
|
||||||
|
@ApiOperation({
|
||||||
|
summary: '修改密码',
|
||||||
|
description: '用户修改自己的密码(需要提供旧密码)'
|
||||||
|
})
|
||||||
|
@ApiBody({ type: ChangePasswordDto })
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 200,
|
||||||
|
description: '密码修改成功',
|
||||||
|
type: CommonResponseDto
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 400,
|
||||||
|
description: '请求参数错误或旧密码不正确'
|
||||||
|
})
|
||||||
|
@SwaggerApiResponse({
|
||||||
|
status: 404,
|
||||||
|
description: '用户不存在'
|
||||||
|
})
|
||||||
@Put('change-password')
|
@Put('change-password')
|
||||||
@HttpCode(HttpStatus.OK)
|
@HttpCode(HttpStatus.OK)
|
||||||
@UsePipes(new ValidationPipe({ transform: true }))
|
@UsePipes(new ValidationPipe({ transform: true }))
|
||||||
|
|||||||
Reference in New Issue
Block a user