// Documentação atualizada da funcionalidade de autenticação usando Command + Microservice /* Fluxo atualizado: Client (HTTP POST /api/v1/auth/login) ↓ envia LoginRequestDto AuthController ↓ envia AuthenticateUserCommand para CommandBus AuthenticateUserHandler (CommandHandler) ↓ executa regras de negócio UserRepository ↓ executa query no banco Result ← resposta encapsulada AuthController ↓ gera JWT com AuthService Resposta final: LoginResponseDto com token */ // 1. AuthController // Entrada da requisição HTTP (POST /api/v1/auth/login) // - Recebe LoginRequestDto com username e password // - Cria AuthenticateUserCommand // - Envia para CommandBus // - Se sucesso, gera JWT via AuthService e retorna LoginResponseDto // 2. AuthenticateUserCommand // Representa a intenção de autenticação // - Dados: username, password // 3. AuthenticateUserHandler // Executa o caso de uso de autenticação // - Busca usuário no UserRepository // - Verifica se o usuário está desligado ou inativo // - Retorna Result // 4. UserRepository // Camada de persistência (interface com o banco de dados) // - Executa query findByUsernameAndPassword(username, password) // 5. Result // Objeto genérico de retorno que encapsula: // - Sucesso (success = true, data: User) // - Falha (success = false, error: string) // 6. AuthService // Gera token JWT com base nos dados do usuário // - Pode gerar access token e refresh token (se necessário) // Estrutura atual suporta futura extração do AuthModule como microserviço // - Usando @MessagePattern('auth.login') no AuthController do microserviço // - Consumo via ClientProxy na aplicação principal com ClientModule