/
Masunium
/
forms-test-backend
Обзор
Документация
Войти
/
Masunium
/
forms-test-backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/auth/auth.controller.ts
127 строк
3 KB
Masunium
added swagger documnetation
03 мар 2026, 07:34
03 мар 2026, 07:34
1cf132b
Код
Авторство
О чём код?
import { Body, Controller, HttpCode, HttpStatus, Post, Req, Res, } from '@nestjs/common'; import { AuthService } from './auth.service'; import { RegisterRequestDto } from './dto/register.dto'; import { LoginRequestDto } from './dto/login.dto'; import type { Request, Response } from 'express'; import { ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiResponse, ApiTags, ApiUnauthorizedResponse, ApiConflictResponse, ApiNotFoundResponse, ApiBearerAuth, } from '@nestjs/swagger'; import { Authorization } from './decorators/authorization.decorator'; @ApiTags('Authentication') @Controller('auth') export class AuthController { constructor(private readonly authService: AuthService) { } @ApiOperation({ summary: 'Регистрация нового аккаунта', description: 'Создает нового пользователя и выдает accessToken. RefreshToken сохраняется в httpOnly cookie.', }) @ApiCreatedResponse({ description: 'Аккаунт успешно создан', schema: { example: { accessToken: 'jwt-access-token', }, }, }) @ApiConflictResponse({ description: 'Пользователь с такой почтой уже существует', }) @Post('register') @HttpCode(HttpStatus.CREATED) async register( @Res({ passthrough: true }) res: Response, @Body() dto: RegisterRequestDto, ) { return await this.authService.register(res, dto); } @ApiOperation({ summary: 'Авторизация', description: 'Проверяет email и пароль. Возвращает accessToken и устанавливает refreshToken в cookie.', }) @ApiOkResponse({ description: 'Успешная авторизация', schema: { example: { accessToken: 'jwt-access-token', }, }, }) @ApiNotFoundResponse({ description: 'Пользователь не найден или неверный пароль', }) @Post('login') @HttpCode(HttpStatus.OK) async login( @Res({ passthrough: true }) res: Response, @Body() dto: LoginRequestDto, ) { return await this.authService.login(res, dto); } @ApiBearerAuth() @ApiOperation({ summary: 'Обновление токенов', description: 'Обновляет accessToken по refreshToken из cookies. RefreshToken должен быть валиден.', }) @ApiOkResponse({ description: 'Токены успешно обновлены', schema: { example: { accessToken: 'new-jwt-access-token', }, }, }) @ApiUnauthorizedResponse({ description: 'Refresh token отсутствует или недействителен', }) @ApiNotFoundResponse({ description: 'Пользователь не найден', }) @Authorization() @Post('refresh') @HttpCode(HttpStatus.OK) async refresh( @Req() req: Request, @Res({ passthrough: true }) res: Response, ) { return await this.authService.refresh(req, res); } @ApiBearerAuth() @ApiOperation({ summary: 'Выход из системы', description: 'Удаляет refreshToken из cookies, завершает сессию пользователя.', }) @ApiOkResponse({ description: 'Выход выполнен успешно', }) @Authorization() @Post('logout') @HttpCode(HttpStatus.OK) async logout(@Res({ passthrough: true }) res: Response) { return await this.authService.logout(res); } }