import { Controller, Post, Body, Get, UseGuards } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth } from '@nestjs/swagger'; import { AuthService } from './auth.service'; import { JwtAuthGuard } from './jwt-auth.guard'; import { CurrentUser } from './current-user.decorator'; @ApiTags('auth') @Controller('auth') export class AuthController { constructor(private readonly authService: AuthService) {} @Post('login') @ApiOperation({ summary: 'Login de usuário e emissão de JWT' }) @ApiResponse({ status: 200, description: 'Login efetuado com sucesso.' }) async login(@Body() body: any) { return this.authService.login(body.email, body.password); } @Post('refresh') @ApiOperation({ summary: 'Atualiza o access token a partir do refresh token' }) @ApiResponse({ status: 200, description: 'Tokens atualizados com sucesso.' }) async refresh(@Body() body: any) { return this.authService.refresh(body.email, body.refreshToken); } @Post('logout') @UseGuards(JwtAuthGuard) @ApiBearerAuth() @ApiOperation({ summary: 'Efetua logout e revoga a sessão do usuário' }) @ApiResponse({ status: 200, description: 'Logout efetuado com sucesso.' }) async logout(@CurrentUser() user: any) { return this.authService.logout(user.sub); } @Post('register') @ApiOperation({ summary: 'Auto-cadastro de novos usuários' }) @ApiResponse({ status: 201, description: 'Usuário cadastrado com sucesso.' }) async register(@Body() body: any) { return this.authService.register(body); } @Get('me') @UseGuards(JwtAuthGuard) @ApiBearerAuth() @ApiOperation({ summary: 'Retorna os dados do usuário autenticado' }) @ApiResponse({ status: 200, description: 'Dados retornados com sucesso.' }) async getMe(@CurrentUser() user: any) { return this.authService.validateUserById(user.sub); } }