API Centralizada do SuperApp CPTM
🚀 Introdução
Esta API atua como camada intermediária entre clientes (Web/Mobile) e serviços da CPTM. Utiliza Fastify, TypeScript, Redis, PostgreSQL, Prisma e Docker para oferecer uma solução robusta, escalável e segura.
- 🧱 Fastify + TypeScript – framework performático com tipagem forte.
- 🧠 Redis – armazena o JWT da autenticação com a CPTM.
- 🐘 PostgreSQL + Prisma – persistência dos dados extraídos do GTFS.
- 📦 Docker + docker-compose – containerização e orquestração dos serviços.
- ♻ Makefile – automatiza rotinas de desenvolvimento, deploy e manutenção.
- 🧩 Arquitetura modular – separa
routes
,services
,domain
,helpers
etypes
para mais clareza e manutenção.
🗂️ Estrutura do Repositório
api_cptm/
├─ prisma/
│ ├─ migrations/
│ └─ schema.prisma
├─ src/
│ ├─ domain/
│ ├─ helpers/
│ ├─ routes/
│ ├─ services/
│ ├─ types/
│ ├─ api.ts
│ └─ db.ts
├─ Dockerfile
├─ docker-compose.yml
├─ Makefile
├─ .env
├─ tsconfig.json
└─ package.json
🏗️ Comandos com Makefile
Todos os comandos de build, deploy, testes e manutenção estão encapsulados no Makefile
:
PROJECT_NAME=fastify-api
up:
docker compose up -d --build
docker exec -it fastify-api npx prisma migrate reset
docker exec -it fastify-api npx prisma generate
down:
docker compose down -v
restart: down up
logs:
docker compose logs -f
build:
docker compose build
bash:
docker compose exec api bash
redis-cli:
docker compose exec redis redis-cli
prune:
docker system prune -af && docker volume prune -f
force-kill:
sudo docker rm -f fastify-redis || true
reset:
sudo systemctl restart docker || true
migrate:
docker exec -it fastify-api npx prisma migrate reset
generate:
docker exec -it fastify-api npx prisma generate
Principais comandos
make up
– sobe containers, aplica migrations (reset
) e gera Prisma Client.make down
– derruba containers e volumes.make restart
– reinicia todo o stack.make logs
– exibe logs em tempo real.make build
– builda containers.make bash
– abre shell dentro do container da API.make redis-cli
– abre prompt do Redis.make prune
– limpa containers, imagens e volumes não usados.make migrate
– aplica migrations via Prisma dentro do container.make generate
– gera Prisma Client.
⚙️ Inicialização Completa
# Ajuste variáveis no .env (String Postgres)
# Subir ambiente completo:
make up
# Visualizar logs:
make logs
# Acessar shell da API:
make bash
# Reduzir snapshots antigos:
make prune
🔐 Autenticação
authService.ts
gera e gerencia o JWT da CPTM.- Redis armazena token com TTL.
- Requisições subsequentes reutilizam JWT.
- Quando expira, serviço reautentica automaticamente.
📡 Endpoints (exemplos)
GET /linhas
Retorna as linhas com suas respectivas estações:
[
{
"linhaNumero": 13,
"linhaNome": "Linha 13 Jade",
"empresa": "CPTM",
"estacoes": [
{
"id": 155,
"nome": "Aeroporto - Guarulhos",
"acessivel": true,
"bicicletario": false,
"linhaNumero": 13,
"linhaNome": "Linha 13 Jade",
"empresa": "CPTM"
},
{
"id": 157,
"nome": "Engº. Goulart",
"acessivel": true,
"bicicletario": true,
"linhaNumero": 13,
"linhaNome": "Linha 13 Jade",
"empresa": "CPTM"
},
{
"id": 156,
"nome": "Guarulhos - CECAP",
"acessivel": true,
"bicicletario": false,
"linhaNumero": 13,
"linhaNome": "Linha 13 Jade",
"empresa": "CPTM"
}
]
}
]
POST /gtfs/import
Importa da API da CPTM salva o conteúdo dos gtfs de Schedule no banco de dados
Outros endpoints seguem padrão similar.
🔄 Ingestão e Consulta dos Dados GTFS
- Scripts executados off‑line processam arquivos GTFS (CSV).
- Dados salvos no PostgreSQL via Prisma.
- Endpoints fazem consultas offline, melhorando latência e resiliência.
🛡️ Segurança & Middleware
- Validação com JSON Schema / Fastify.
- Rate limiting configurável.
- Queries parametrizadas com Prisma – mitigação de SQL Injection.
- Limites de request para proteção contra DDoS.
📈 Resiliência & Performance
- Cache de token e consultas frequentes no Redis.
- Suporte a execução em cluster (pm2 / Kubernetes).
- Logs estruturados para monitoramento.
- Fácil integração com sistemas de monitoramento (Prometheus, etc.).
🧪 Organização de Código
Módulo | Função Principal |
---|---|
domain/ | Tipagens e regras de domínio |
routes/ | Definições das rotas e validações |
services/ | Conexões com CPTM, DB e lógica |
helpers/ | Parser GTFS, utils Redis/JWT |
types/ | DTOs e Interfaces customizadas |
db.ts | Inicialização do Prisma Cliente |
api.ts | Instancia Fastify, plugins e rotas |
🎯 Scripts via package.json
npm run dev
– inicia Fastify em modo dev com reload.npm run build
– transpila TS para JS.npm run start
– executa build compilado.npm run migrate
– executa migrations Prisma.npm run generate
– gera Prisma Client.
👥 Como Contribuir
- Fork do repositório.
- Crie feature branch (
feature/*
). - Implemente testes (Jest + Fastify inject).
- Adicione/atualize migrações (caso necessário).
- Abra PR com descrição, screenshots, testes.
Referências
- Documentação oficial da CPTM — Postman Collection
📎 Resumo
Esta API é um facade seguro e eficiente que:
- Faz mediação entre cliente e CPTM.
- Armazena GTFS offline para consulta rápida.
- Usa containerização e automação via Makefile.
- Assegura segurança, performance e manutenibilidade.
💡 Próximos passos:
- Documentar via OpenAPI/Swagger.
- Monitoramento com dashboards.
- Implementar Load Balancer
- Pipelines CI/CD integradas aos comandos
Makefile
.