Contrato da API de Autenticação
Este documento descreve os contratos de interface para a API de Autenticação.

Base URL: /api/v1/auth (ou /api/auth)

1. Realizar Login
   Autentica o usuário e retorna os tokens de acesso.

Método: POST
Endpoint: /login
Content-Type: application/json
Request Body
{
"username": "usuario.sistema",
"password": "senha_secreta"
}
Response (200 OK)
Retorna o Access Token no corpo e configura o Refresh Token como um Cookie HttpOnly.

{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"type": "Bearer",
"expiresIn": 900,
"refreshToken": "550e8400-e29b-41d4-a716-446655440000",
"username": "usuario.sistema"
}
Cookies Set:

refreshToken
: UUID do refresh token (HttpOnly, Secure, 7 dias)
Erros Comuns
400 Bad Request: Campos obrigatórios ausentes.
401/500: Usuário ou senha inválidos. 2. Renovar Token (Refresh)
Gera um novo par de tokens usando um Refresh Token válido.

Método: POST
Endpoint: /refresh
Request
O Refresh Token pode ser enviado de duas formas (nesta ordem de prioridade):

Body JSON:
{
"refreshToken": "550e8400-e29b-41d4-a716-446655440000"
}
Cookie
refreshToken
: Enviado automaticamente pelo navegador.
Response (200 OK)
Retorna novos tokens e atualiza o cookie.

{
"token": "novatoken...",
"type": "Bearer",
"expiresIn": 900,
"refreshToken": "novorefreshtoken...",
"username": "usuario.sistema"
}
Erros Comuns
403 Forbidden: Token expirado ou inválido. 3. Obter Usuário Atual (Me)
Retorna dados detalhados do usuário logado.

Método: GET
Endpoint: /me
Headers: Authorization: Bearer <access_token>
Response (200 OK)
{
"matricula": 12345,
"userName": "usuario.sistema",
"nome": "João da Silva",
"codigoFilial": "1",
"nomeFilial": "Matriz",
"rca": 100,
"discountPercent": 0,
"sectorId": 10,
"sectorManagerId": 50,
"supervisorId": 55
}
Erros Comuns
401 Unauthorized: Token não enviado ou inválido.
404 Not Found: Usuário não encontrado no banco. 4. Logout
Invalida a sessão atual.

Método: POST
Endpoint: /logout
Headers: Authorization: Bearer <access_token>
Request (Opcional)
Pode enviar o refresh token no corpo para forçar sua invalidação, caso não esteja no cookie.

{
"refreshToken": "..."
}
Response (200 OK)
{
"message": "Logout realizado com sucesso"
}
Effect:

Adiciona o Access Token à Blacklist (Redis).
Remove o Refresh Token do banco.
Remove o Cookie
refreshToken
.
