saveinmed/backoffice/src/auth/auth.controller.ts
Tiago Yamamoto 42f72f5f43 docs: adiciona documentação completa do projeto SaveInMed
- Cria README.md na raiz com visão global e diagrama de arquitetura
- Adiciona/atualiza README.md em todos os componentes:
  - backend (API Go)
  - backoffice (NestJS)
  - marketplace (React/Vite)
  - saveinmed-bff (Python/FastAPI)
  - saveinmed-frontend (Next.js)
  - website (Fresh/Deno)
- Atualiza .gitignore em todos os componentes com regras abrangentes
- Cria .gitignore na raiz do projeto
- Renomeia pastas para melhor organização:
  - backend-go → backend
  - backend-nest → backoffice
  - marketplace-front → marketplace
- Documenta arquitetura, tecnologias, setup e fluxo de desenvolvimento
2025-12-17 17:07:30 -03:00

48 lines
1.6 KiB
TypeScript

import { Body, Controller, Get, HttpCode, HttpStatus, Post, Req, Res, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { FastifyReply } from 'fastify';
import { CreateUserDto } from '../users/dto/create-user.dto';
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('register')
async register(@Body() dto: CreateUserDto, @Res({ passthrough: true }) reply: FastifyReply) {
return this.authService.register(dto, reply);
}
@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);
}
@Get('profile')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
async profile(@Req() req: any) {
return req.user;
}
}