Deploy inicial: API FastAPI + infra Podman/Caddy + docs

- App FastAPI (main.py, app/): rotas /health e /dados_retorno, middleware anti-scanner, logging configurado
- Config via configs.json (Pydantic); segredos fora do codigo e do git (.gitignore)
- Dockerfile (oracledb thin, HEALTHCHECK) + requirements.txt + .dockerignore
- Deploy Podman/Quadlet + Caddy em deploy/
- Docs: CLAUDE.md + docs/ (arquitetura, deploy, known-issues)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ricardo Leite 2026-07-28 16:37:13 -03:00
commit 15c89c9038
22 changed files with 1397 additions and 0 deletions

45
CLAUDE.md Normal file
View file

@ -0,0 +1,45 @@
# API-Scardua
API FastAPI de integração da Scardua com serviços externos (Holmes, Apollo) e banco Oracle.
No ar: **https://api-scardua.flstecnologia.tech**
## Visão e roadmap
Ideia, arquitetura e roadmap completos: **[docs/arquitetura.md](docs/arquitetura.md)**.
Resumo: a API roda na **nossa VPS (FLS)**, não na do cliente — recebe dados do Holmes do cliente (Scardua), trata, e devolve pro Oracle dele via um **conector no server do cliente** (o Oracle está em rede privada `10.16.x`, inalcançável direto da VPS).
## Stack
- Python ≥3.10 · FastAPI + Uvicorn (ASGI)
- Pydantic v2 (validação e config)
- httpx (chamadas às APIs externas)
- oracledb — driver Oracle em **thin mode** (sem Instant Client)
- Deps em `pyproject.toml` (extra `dev`: pytest, ruff). `requirements.txt` = só runtime (usado no Dockerfile).
## Estrutura
- `main.py` — app FastAPI, middleware, rotas raiz (`/health`, `/dados_retorno`, `/docs` protegido), config de logging
- `app/config.py` — carrega `configs.json` (Pydantic) **no import** (precisa existir ou a app não sobe)
- `app/middleware.py``block_scanners`: denylist + heurística anti-scanner (NÃO é allowlist estrita)
- `app/security.py` — JWT + auth via Oracle (⚠️ incompleto — ver docs/known-issues.md)
- `app/services/holmes.py` — integração com a API do Holmes
- `app/services/controle_api.py` — grava telemetria/contadores no Oracle
- `app/v1/` — router versionado (`/v1/...`)
## Rodar local (Windows)
Precisa do `configs.json` na raiz (NÃO versionado — ver `configs.example.json`).
```
uvicorn main:app --reload --port 8000
```
## Config e segredos
- Tudo vem de `configs.json`, lido em `app/config.py`. Está no `.gitignore` e `.dockerignore`**nunca commitar**.
- Template seguro e versionável: `configs.example.json`.
## Deploy
Container Podman na VPS (Debian 13, rootless + Quadlet + Caddy). Runbook: **[docs/deploy.md](docs/deploy.md)**.
## Convenções
- Código, nomes e comentários em **português**.
- Lint/format: **ruff** (config no `pyproject.toml` — linha 120, aspas duplas).
- Logging: use `logging.info/error`; o nível é configurado em `main.py` via `settings.log_level`.
## Problemas conhecidos
Lista completa em **[docs/known-issues.md](docs/known-issues.md)**. (A senha do Holmes já saiu do código pro `configs.json` — feito em 2026-07-23.)