Arquitetura da API
Objetivo
Seção intitulada “Objetivo”API REST sobre PostgreSQL, com:
- Autenticação segura para frontend (sessão) e integrações (Bearer)
- CRUD genérico no da API Kunk (
/items/:collection) - Rotas de domínio para regras de negócio
- Módulos opcionais desligados por padrão
Diagrama lógico
Seção intitulada “Diagrama lógico”┌─────────┐ ┌──────────────┐ ┌─────────┐ ┌─────────────┐│ Painel │ │ Cadastramento│ │ Admin │ │ Integrações ││ (cookie)│ │ (cookie) │ │(cookie +│ │ (Bearer) ││ │ │ │ │ Admin) │ │ │└────┬────┘ └──────┬───────┘ └────┬────┘ └──────┬──────┘ │ │ │ │ └─────────────┴───────┬──────┴─────────────┘ ▼ ┌───────────────────┐ │ Kunk API /v1 │ │ auth · items · │ │ domain · files · │ │ config · modules │ └─────────┬─────────┘ ▼ ┌───────────────────┐ │ PostgreSQL │ │ (schema do produto) │ └───────────────────┘Camadas internas
Seção intitulada “Camadas internas”routes/ → HTTP (Express/Fastify)controllers/ → orquestraçãoservices/ → regras de negóciorepositories/ → acesso ao Postgresmiddleware/ → auth, RBAC, validação, rate limitschema/ → whitelist de collections + Zod/JoiPrincípios
Seção intitulada “Princípios”- Whitelist de collections — só tabelas do schema do produto são acessíveis via
/items - Dual auth — cookie para browser; Bearer para API; nunca misturar
- Genérico + domínio — CRUD simples em
/items; regras complexas em rotas específicas - Sem SQL livre — filtros tipados; nunca aceitar SQL do cliente
- Permissões por collection/ação — RBAC explícito
- Resposta padronizada —
{ data, meta, errors } - Versionamento — prefixo
/api/v1 - Módulos opt-in — Loggi, Pagar.me, Calendar, etc. via env/config
| Peça | Tecnologia |
|---|---|
| Runtime | Node.js + Express ou Fastify |
| Banco | PostgreSQL + pg / Kysely |
| Validação | Zod |
| Senhas / tokens | bcrypt ou argon2 |
| Docs runtime | OpenAPI 3 + Swagger UI |
| Testes | node:test / Vitest |
O que a API não é
Seção intitulada “O que a API não é”- Não replica painéis admin de terceiros (flows, revisions, admin UI)
- Não expõe o schema inteiro do Postgres
- Não substitui o frontend; só a camada de dados/auth
Frontends (cadastramento, admin, painel, termos): ver ../frontend/.
Persistência e lógica de negócio
Seção intitulada “Persistência e lógica de negócio”A API Kunk:
- Usa
NEW_API_DATABASE_URL(Postgres próprio) - Usa repositórios SQL nativos
- Mantém, quando fizer sentido, a lógica de negócio já existente (orders, services, auth)
