- Adiciona Dockerfile e docker-compose para containerizacao - Adiciona docker-entrypoint.sh com inicializacao - Adiciona scripts/seed-admin.js para criar admin inicial - Adiciona docs/ com logos originais CambioReal - Atualiza README.md com instrucoes de uso - Atualiza queries.js com metricas de portfólio Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.3 KiB
API Reference - BI Agentes
Documentacao dos endpoints HTTP do sistema BI Agentes.
Base URL
http://localhost:3080
Autenticacao
O sistema usa autenticacao baseada em sessao. Apos login bem-sucedido, um cookie de sessao e enviado automaticamente pelo browser.
Cookie: connect.sid
Duracao: 8 horas
Endpoints
GET /login
Exibe a pagina de login.
Autenticacao: Nao requerida
Comportamento:
- Se usuario ja autenticado: redireciona para
/dashboard - Se nao autenticado: retorna
login.html
Response:
| Status | Descricao |
|---|---|
| 200 | Pagina HTML de login |
| 302 | Redirect para /dashboard (se ja logado) |
Query Parameters:
| Param | Tipo | Descricao |
|---|---|---|
| error | number | Se 1, exibe mensagem de erro |
Exemplo:
GET /login HTTP/1.1
Host: localhost:3080
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<html>...login form...</html>
POST /login
Processa tentativa de login.
Autenticacao: Nao requerida
Content-Type: application/x-www-form-urlencoded
Request Body:
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
| string | Sim | Email do agente | |
| senha | string | Sim | Senha em texto plano |
Response:
| Status | Descricao | Redirect |
|---|---|---|
| 302 | Login bem-sucedido | /dashboard |
| 302 | Login falhou | /login?error=1 |
Comportamento:
- Busca agente por email no SQLite
- Compara senha com hash (bcrypt)
- Se valido, cria sessao com dados do agente
- Redireciona para dashboard
Exemplo:
POST /login HTTP/1.1
Host: localhost:3080
Content-Type: application/x-www-form-urlencoded
email=agente@cambioreal.com&senha=minhasenha123
HTTP/1.1 302 Found
Location: /dashboard
Set-Cookie: connect.sid=s%3A...; Path=/; HttpOnly
Dados da Sessao (interno):
req.session.agente = {
id: 1, // ID interno SQLite
email: "agente@email.com",
agente_id: 76, // ID do agente no RDS
nome: "ValorFx"
}
GET /logout
Encerra a sessao do usuario.
Autenticacao: Nao requerida (mas so faz sentido se logado)
Response:
| Status | Descricao | Redirect |
|---|---|---|
| 302 | Sessao destruida | /login |
Comportamento:
- Destroi sessao server-side
- Invalida cookie
- Redireciona para login
Exemplo:
GET /logout HTTP/1.1
Host: localhost:3080
Cookie: connect.sid=s%3A...
HTTP/1.1 302 Found
Location: /login
Set-Cookie: connect.sid=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT
GET /dashboard
Exibe o dashboard de transacoes do agente.
Autenticacao: Requerida (cookie de sessao)
Response:
| Status | Descricao |
|---|---|
| 200 | Pagina HTML do dashboard |
| 302 | Redirect para /login (nao autenticado) |
| 500 | Erro ao carregar dados |
Comportamento:
- Middleware
requireAuthverifica sessao - Busca
agente_idda sessao - Executa queries no RDS (BRL→USD e USD→BRL)
- Serializa e ordena dados
- Gera HTML com KPIs, graficos e tabela
- Retorna HTML completo
Dados Retornados no HTML:
O dashboard inclui dados embedded como JavaScript:
window.TRANSACOES = [
{
fluxo: "BRL → USD",
cliente: "Cliente A",
data_operacao: "2024-01-15 14:30",
valor_reais: 10000.00,
valor_dolar: 2000.00,
iof_pct: 1.10,
iof_valor_rs: 110.00,
taxa_ptax: 4.95,
taxa_cobrada: 5.00,
spread_bruto: 0.05,
spread_pct: 1.00,
status: "completed"
},
// ... mais transacoes
];
Exemplo:
GET /dashboard HTTP/1.1
Host: localhost:3080
Cookie: connect.sid=s%3A...
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<html>
<head><title>BI Agentes - Dashboard</title></head>
<body>
<!-- KPIs, Graficos, Tabela -->
</body>
</html>
GET /
Redireciona para o dashboard.
Autenticacao: Nao requerida (redirect acontece primeiro)
Response:
| Status | Descricao | Redirect |
|---|---|---|
| 302 | Redirect | /dashboard |
Exemplo:
GET / HTTP/1.1
Host: localhost:3080
HTTP/1.1 302 Found
Location: /dashboard
Arquivos Estaticos
GET /public/*
Serve arquivos estaticos da pasta public/.
Autenticacao: Nao requerida
Arquivos Disponiveis:
| Path | Arquivo |
|---|---|
| /public/login.html | Pagina de login |
Exemplo:
GET /public/login.html HTTP/1.1
Host: localhost:3080
Codigos de Erro
| Codigo | Significado | Causa Comum |
|---|---|---|
| 302 | Redirect | Login/logout, acesso nao autorizado |
| 500 | Erro interno | Falha conexao RDS, erro de query |
Middleware
requireAuth
Middleware que protege rotas que exigem autenticacao.
Comportamento:
function requireAuth(req, res, next) {
if (req.session && req.session.agente) {
return next(); // Continua para rota
}
res.redirect('/login'); // Redireciona
}
Rotas Protegidas:
- GET /dashboard
Modelo de Dados (Sessao)
Agente (sessao)
interface AgenteSession {
id: number; // ID interno (SQLite)
email: string; // Email do agente
agente_id: number; // ID no sistema RDS
nome: string; // Nome de exibicao
}
Exemplos de Uso
Fluxo Completo de Login
# 1. Tentar acessar dashboard (sera redirecionado)
curl -v http://localhost:3080/dashboard
# < HTTP/1.1 302 Found
# < Location: /login
# 2. Fazer login
curl -v -X POST http://localhost:3080/login \
-d "email=agente@cambioreal.com" \
-d "senha=minhasenha" \
-c cookies.txt
# < HTTP/1.1 302 Found
# < Location: /dashboard
# < Set-Cookie: connect.sid=...
# 3. Acessar dashboard com cookie
curl -v http://localhost:3080/dashboard \
-b cookies.txt
# < HTTP/1.1 200 OK
# < Content-Type: text/html
# 4. Fazer logout
curl -v http://localhost:3080/logout \
-b cookies.txt
# < HTTP/1.1 302 Found
# < Location: /login
Futuras Extensoes
Endpoints planejados para proximas versoes:
| Endpoint | Metodo | Descricao |
|---|---|---|
| /api/export | GET | Exportar transacoes (CSV/Excel) |
| /api/kpis | GET | KPIs em formato JSON |
| /api/transacoes | GET | Transacoes paginadas (JSON) |