Arquitetura do Sistema / System Architecture
Visão Geral
O Banking Challenges é um monorepo gerenciado pelo Turborepo com pnpm workspaces. Cada desafio é um pacote independente, mas todos compartilham a mesma visão: simular sistemas financeiros brasileiros reais com a tecnologia mais adequada para cada problema.
Switch: TypeScript vs Go
Stack Completo
| Camada | Tecnologia | Desafios |
|---|---|---|
| Backend | TypeScript (Koa, Fastify, Express) | 01, 05, 06, 07, 08, 09 |
| Frontend | Next.js 14, Vite + React | 10, 11 |
| Database | MongoDB, PostgreSQL, Redis | Todos |
| Infra | Docker, Kubernetes, Proxmox | 12 |
| CI/CD | GitHub Actions, GitLab CI | 13 |
| Docs | VitePress | Todos |
Diagrama de Arquitetura
┌─────────────────────────────────────────────────────────────────┐
│ Clientes / Consumers │
│ GraphQL Playground │ REST Clients │ Web Browser │ Postman │
└──────────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────────┐
│ API Gateway (opcional) │
│ Roteamento, autenticação, rate-limit │
└──┬──────────┬──────────┬──────────┬──────────┬─────────────────┘
│ │ │ │ │
┌──▼──┐ ┌────▼────┐ ┌──▼──┐ ┌───▼───┐ ┌───▼───┐
│Ledger│ │SPI/ICOM│ │DICT │ │ISO8583│ │Workflow│
│ │ │ │ │ │ │ │ │Engine │
│ Koa │ │Fastify │ │Express│ │TCP │ │Redis │
│GraphQl│ │ISO20022│ │REST │ │Server │ │Graph │
│MongoDB│ │Go(Gin) │ │JSON │ │Binário│ │DAG │
└──┬───┘ └───┬────┘ └──┬───┘ └───┬───┘ └───┬───┘
│ │ │ │ │
│ ┌────▼────┐ ┌──▼───┐ ┌──▼───┐ ┌───▼───┐
│ │Open Fin │ │NFS-e │ │Report│ │Leaky │
│ │Fastify │ │SOAP │ │Fastify│ │Bucket │
│ │REST+FAPI│ │XML │ │PG+MinIO│ │Redis │
└─────┴─────────┴──┴─────┴──┴──────┴──┴───────┘Princípios Arquiteturais
| Princípio | Descrição |
|---|---|
| Independência | Cada desafio é um pacote isolado |
| Simulação Realista | Replicam sistemas financeiros reais |
| Infra Local | Docker Compose: MongoDB, PostgreSQL, Redis, MinIO |
| TypeScript Nativo | Backend 100% TypeScript |
| Padrões Financeiros | ISO 20022, ISO 8583, ABRASF |
Mapeamento de Desafios
| # | Desafio | Stack Principal | Database |
|---|---|---|---|
| 01 | Ledger GraphQL | Koa + GraphQL + Relay | MongoDB |
| 02 | SPI Simulator | Go (Gin) + ISO 20022 | In-memory |
| 03 | DICT Simulator | Go (Gin) + REST | In-memory |
| 04 | ISO 8583 | TCP Server | PostgreSQL |
| 05 | Workflow Engine | Fastify + DAG + WebSockets | Redis |
| 06 | Open Finance | Fastify + FAPI + OAuth 2.0 | PostgreSQL |
| 07 | NFS-e | Fastify + SOAP + XML | PostgreSQL |
| 08 | Report System | Fastify + Streaming | PostgreSQL + MinIO |
| 09 | Leaky Bucket | Fastify + Lua Scripts | Redis |
| 10 | Landing Page | Next.js 14 + Tailwind | - |
| 11 | KYC System | Vite + React | PostgreSQL |
| 12 | Proxmox + IaC | Terraform + Ansible | - |
| 13 | CI/CD | GitHub Actions / GitLab CI | - |
| 14 | RFC / ADR | Markdown + Mermaid | - |
| 15 | PISP | Open Finance + FAPI | PostgreSQL |
| 16 | Antecipação | Pricing Engine | PostgreSQL |
Fluxo de Dados
Segurança
| Camada | Tecnologia |
|---|---|
| Transporte | TLS 1.3, mTLS |
| Autenticação | JWT, OAuth 2.0, FAPI |
| Criptografia | AES-256, RSA, 3DES |
| Rate Limiting | Leaky Bucket (Redis + Lua) |
| Audit | Logs imutáveis, 5+ anos |
Como testar
bash
# Subir tudo
docker compose up -d
# Testar Ledger
curl -X POST http://localhost:3001/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{ accounts { id name balance } }"}'
# Testar SPI (Go)
cd packages/backend/spi-simulator-go
go run .
# Testar ISO 8583
echo "0100..." | nc localhost 3004Lições aprendidas
- Monorepo com Turborepo — Independência entre desafios, compartilhamento de código
- Go para serviços críticos — SPI, DICT, ISO 8583 precisam de performance
- TypeScript para APIs — GraphQL, REST, webhooks são mais produtivos em TS
- Docker Compose — Infraestrutura local completa (MongoDB, PostgreSQL, Redis, MinIO)
- Padrões financeiros — ISO 20022, ISO 8583, ABRASF não são opcionais
- Segurança em camadas — TLS, JWT, mTLS, rate limiting, audit
- Documentação viva — VitePress com i18n PT/EN
- CI/CD obrigatório — Toda mudança passa por testes e aprovação