import { Body, Controller, Get, HttpCode, HttpStatus, Post, Req, Res, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { FastifyReply } from 'fastify'; import { JwtAuthGuard } from './guards/jwt-auth.guard'; import { RefreshTokenGuard } from './guards/refresh-token.guard'; import { AuthService } from './auth.service'; import { LoginDto } from './dto/login.dto'; @ApiTags('auth') @Controller('auth') export class AuthController { constructor(private readonly authService: AuthService) { } @Post('login') @HttpCode(HttpStatus.OK) async login(@Body() dto: LoginDto, @Res({ passthrough: true }) reply: FastifyReply) { return this.authService.login(dto, reply); } @Post('refresh') @UseGuards(RefreshTokenGuard) @HttpCode(HttpStatus.OK) async refresh(@Req() req: any, @Res({ passthrough: true }) reply: FastifyReply) { const userId = req.user?.sub; const refreshToken = req.user?.refreshToken; return this.authService.refreshTokens(userId, refreshToken, reply); } @Post('logout') @UseGuards(JwtAuthGuard) @ApiBearerAuth() async logout(@Req() req: any, @Res({ passthrough: true }) reply: FastifyReply) { return this.authService.logout(req.user.sub, reply); } }