ajuste no command

This commit is contained in:
unknown
2025-03-31 15:12:33 -03:00
parent 69e10717e8
commit 4522575701
11 changed files with 145 additions and 105 deletions

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documentação - Fluxo de Login</title>
<title>Documentação - Fluxo de Login com Microserviço</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
@@ -47,12 +47,11 @@
</style>
</head>
<body>
<h1>🔐 Fluxo de Login - Portal Juru API</h1>
<h1>🔐 Fluxo de Login com Microserviço - Portal Juru API</h1>
<h2>📌 Rota de Login</h2>
<p><strong>URL:</strong> <code>POST /api/v1/auth/login</code></p>
<p><strong>Descrição:</strong> Autentica o usuário, valida regras de negócio e retorna um token JWT.</p>
<p><strong>Acesso:</strong> Público</p>
<p><strong>Descrição:</strong> Autentica o usuário via microserviço e retorna um token JWT.</p>
<h3>📤 Body (JSON)</h3>
<pre>{
@@ -79,40 +78,40 @@
"error": "Usuário ou senha inválidos."
}</pre>
<h2>🧱 Camadas e Responsabilidades</h2>
<h2>🧱 Camadas e Responsabilidades (CQRS + Microservice)</h2>
<table>
<tr><th>Camada</th><th>Responsabilidade</th></tr>
<tr><td>AuthController</td><td>Recebe requisição e coordena autenticação</td></tr>
<tr><td>UsersService</td><td>Orquestra os casos de uso (login, reset, troca senha)</td></tr>
<tr><td>AuthenticateUserService</td><td>Executa lógica de autenticação e validações</td></tr>
<tr><td>UserRepository</td><td>Executa SQL diretamente no Oracle</td></tr>
<tr><td>AuthService</td><td>Gera o token JWT com os dados do usuário</td></tr>
<tr><td>JwtStrategy</td><td>Valida o token em rotas protegidas, usando Redis como cache</td></tr>
<tr><td>RedisClientAdapter</td><td>Wrapper de acesso ao Redis com interface genérica e TTL</td></tr>
<tr><th>Componente</th><th>Responsabilidade</th></tr>
<tr><td>AuthController</td><td>Recebe requisição HTTP e envia AuthenticateUserCommand ao CommandBus</td></tr>
<tr><td>AuthenticateUserCommand</td><td>Representa a intenção de autenticar um usuário</td></tr>
<tr><td>AuthenticateUserHandler</td><td>Executa regras de autenticação com base no comando</td></tr>
<tr><td>UserRepository</td><td>Consulta o banco para obter dados do usuário</td></tr>
<tr><td>Result&lt;T&gt;</td><td>Encapsula sucesso ou falha com mensagens claras</td></tr>
<tr><td>AuthService</td><td>Gera token JWT e/ou Refresh Token</td></tr>
<tr><td>Auth Microservice</td><td>Escuta o evento 'auth.login' e executa a autenticação</td></tr>
<tr><td>ClientProxy</td><td>Faz chamada ao microserviço de autenticação</td></tr>
</table>
<h2>🧊 Redis na Autenticação</h2>
<h2>🔗 Comunicação via Microserviço</h2>
<ul>
<li><strong>Chave:</strong> <code>session:{userId}</code></li>
<li><strong>Valor:</strong> JSON serializado do usuário autenticado</li>
<li><strong>TTL:</strong> 8 horas</li>
<li><strong>Fallback:</strong> Se o cache não existir, consulta ao banco</li>
<li><strong>Auditoria:</strong> espaço reservado para log de acesso</li>
<li><strong>Protocolo:</strong> TCP</li>
<li><strong>Evento:</strong> <code>auth.login</code></li>
<li><strong>Porta:</strong> 3001</li>
<li><strong>Formato:</strong> <code>{ username, password }</code></li>
<li><strong>Resposta:</strong> <code>Result&lt;User&gt;</code></li>
</ul>
<h2>🔐 Proteção de Rotas</h2>
<p>Rotas protegidas utilizam <code>@UseGuards(JwtAuthGuard)</code> e <code>@ApiBearerAuth()</code>.</p>
<p><strong>Header necessário:</strong></p>
<h2>🛡️ Proteção com JWT</h2>
<p>Após o login, o token JWT é retornado e deve ser enviado em todas as requisições protegidas.</p>
<code>Authorization: Bearer &lt;token&gt;</code>
<h2>🚀 Melhorias Futuras</h2>
<ul>
<li>[ ] Blacklist de tokens para logout</li>
<li>[ ] Log de auditoria</li>
<li>[ ] Blacklist de tokens</li>
<li>[ ] Refresh Token</li>
<li>[ ] Controle de permissões/roles</li>
<li>[ ] Log de auditoria</li>
<li>[ ] Controle de permissões e roles</li>
</ul>
<p><strong>Última atualização:</strong> 28/03/2025</p>
<p><strong>Última atualização:</strong> 31/03/2025</p>
</body>
</html>