Arquitetura de microserviços para a plataforma StreamFlix usando pnpm workspace, Fastify, Drizzle ORM e Docker.
streamflix-microservices/
├── apps/ # Microserviços
│ ├── order-service/ # Serviço de pedidos
│ ├── invoice-service/ # Serviço de faturas
│ └── shared-broker/ # Message broker compartilhado
├── docs/ # Documentação
│ ├── architecture/ # Documentação de arquitetura
│ └── feature/ # Documentação de features
├── tests/ # Testes HTTP
│ └── http/ # Arquivos de teste REST
├── scripts/ # Scripts de desenvolvimento
├── docker-compose.yml # Infraestrutura Docker
└── pnpm-workspace.yaml # Configuração do workspace
- pnpm Workspace - Gerenciamento de monorepo
- Fastify - Framework web rápido
- Drizzle ORM - ORM TypeScript-first
- PostgreSQL - Banco de dados relacional
- RabbitMQ - Message broker
- Docker - Containerização
- TypeScript - Tipagem estática
- ESLint + Prettier - Linting e formatação
- Vitest - Framework de testes
- tsx - Execução TypeScript em desenvolvimento
| Serviço | Porta | Descrição | Status |
|---|---|---|---|
| order-service | 3001 | Gerenciamento de pedidos e eventos | ✅ Ativo |
| invoice-service | 3002 | Processamento de faturas via eventos | ✅ Ativo |
| Pacote | Versão | Descrição | Status |
|---|---|---|---|
| @streamflix/shared-broker | 1.0.0 | RabbitMQ client com producer/consumer | ✅ Ativo |
- Development Guidelines - Guia completo para criar novas features
- Code Standards - Padrões de código obrigatórios
- Testing Guide - Como executar e trabalhar com testes
- Database Migrations - Boas práticas para migrations
- Message Broker Architecture - Documentação completa da arquitetura de message broker
- Tutorial - Guia passo-a-passo para implementação
- Referência Rápida - Consulta rápida para tarefas comuns
- Documentação Técnica - Visão detalhada da arquitetura
- Order Management - Documentação completa da funcionalidade de criação de pedidos
- Invoice Processing - Documentação do serviço de processamento de faturas
- Automatic Invoice Creation - Implementação de criação automática via eventos
- Technical Specification - Especificações técnicas detalhadas
- Node.js 18+
- pnpm 8+
- Docker & Docker Compose
# Instalar pnpm globalmente
npm install -g pnpm
# Verificar versão
pnpm --version# Clonar e entrar no projeto
cd microservices
# Instalar dependências de todos os serviços
pnpm install
# Configurar variáveis de ambiente
cp apps/order-service/env.example apps/order-service/.env
cp apps/invoice-service/env.example apps/invoice-service/.env# Iniciar todos os serviços
pnpm dev
# Iniciar serviços específicos
pnpm dev:order # Order Service
pnpm dev:invoice # Invoice Service
# Build de todos os serviços
pnpm build
# Build de serviços específicos
pnpm build:order # Order Service
pnpm build:invoice # Invoice Service# Subir toda a infraestrutura
pnpm docker:up
# Ver logs
pnpm docker:logs
# Parar serviços
pnpm docker:down# Gerar migrações (todos os serviços)
pnpm db:generate
# Executar migrações (todos os serviços)
pnpm db:migrate
# Abrir Drizzle Studio (todos os serviços)
pnpm db:studio# Order Service
pnpm db:generate:order
pnpm db:migrate:order
pnpm db:studio:order
# Invoice Service
pnpm db:generate:invoice
pnpm db:migrate:invoice
pnpm db:studio:invoicepnpm dev- Iniciar todos os serviçospnpm dev:order- Iniciar apenas order-servicepnpm dev:invoice- Iniciar apenas invoice-servicepnpm build- Build de todos os serviçospnpm start- Iniciar todos os serviços em produção
pnpm lint- Executar linting em todos os serviçospnpm lint:fix- Corrigir problemas de lintingpnpm type-check- Verificar tipos TypeScript
pnpm test- Executar todos os testespnpm test:watch- Testes em modo watchpnpm test:ui- Interface visual dos testespnpm --filter order-service test- Testes do order-servicepnpm --filter invoice-service test- Testes do invoice-service
pnpm docker:build- Build das imagenspnpm docker:up- Subir containerspnpm docker:down- Parar containerspnpm docker:logs- Ver logs dos containers
pnpm new-service <name>- Criar novo serviçopnpm clean- Limpar dependências e builds
# Criar novo serviço automaticamente
pnpm new-service payment-service
# O script criará:
# - Estrutura completa de pastas
# - Configurações TypeScript/ESLint
# - Dockerfile e docker-compose config
# - Schema Drizzle básico
# - API Fastify com Swagger
# - Scripts de desenvolvimento- Order Service: http://localhost:3001
- API Docs: http://localhost:3001/docs
- Health: http://localhost:3001/health
- Invoice Service: http://localhost:3002
- API Docs: http://localhost:3002/docs
- Health: http://localhost:3002/health
- RabbitMQ Management: http://localhost:15672 (admin/admin)
- PostgreSQL: localhost:5432
- Database:
orders_db(Order Service) - Database:
invoices_db(Invoice Service)
- Database:
Nossa arquitetura usa uma única instância do PostgreSQL com múltiplos databases para diferentes serviços:
- PostgreSQL: localhost:5432
- Database:
orders_db(Order Service) - Database:
invoices_db(Invoice Service)
- Database:
Para mais detalhes sobre configuração, migrações e troubleshooting, veja Database Configuration.
Cada serviço segue a estrutura padrão:
apps/service-name/
├── src/
│ ├── db/
│ │ ├── schema.ts # Schema Drizzle
│ │ ├── connection.ts # Conexão DB
│ │ └── migrate.ts # Migrações
│ ├── routes/ # Rotas da API
│ ├── services/ # Lógica de negócio
│ ├── types/ # Tipos e validações
│ └── index.ts # Aplicação principal
├── scripts/ # Scripts específicos
├── package.json # Dependências
├── tsconfig.json # Config TypeScript
├── drizzle.config.ts # Config Drizzle
├── Dockerfile # Container
└── README.md # Documentação
# Ver todos os pacotes
pnpm list -r
# Executar comando em serviço específico
pnpm --filter order-service <comando>
# Executar comando em todos os serviços
pnpm --recursive <comando>
# Adicionar dependência a serviço específico
pnpm --filter order-service add fastify# Ver containers ativos
docker ps
# Logs de serviço específico
docker logs order-service
# Acessar container
docker exec -it order-service sh
# Rebuild serviço específico
docker-compose build order-serviceO projeto inclui uma suíte completa de testes HTTP usando arquivos .http:
# Estrutura dos testes
tests/
├── README.md # Guia completo de testes
└── http/
├── order.http # Testes do Order Service
└── invoice.http # Testes do Invoice ServiceComo usar:
- Instalar extensão "REST Client" no VS Code
- Abrir arquivos
.httpemtests/http/ - Clicar em "Send Request" acima de cada bloco HTTP
- Ver respostas no painel dividido
Sequência de teste recomendada:
- Health Checks → Verificar se serviços estão funcionando
- Create Orders → Executar casos de teste em
order.http - Verify Invoices → Validar criação automática em
invoice.http - Statistics → Confirmar contadores corretos
# Executar todos os testes
pnpm test
# Testes em modo watch
pnpm test:watch
# Testes de serviço específico
pnpm --filter order-service test
pnpm --filter invoice-service testO projeto inclui configurações completas de debug para VS Code:
- 🚀 Debug Order Service: Debug apenas o order-service (porta 3001)
- 🚀 Debug Invoice Service: Debug apenas o invoice-service (porta 3002)
- 🧪 Debug Order Service Tests: Debug testes do order-service
- 🧪 Debug Invoice Service Tests: Debug testes do invoice-service
- 🚀 Debug Both Services: Debug ambos os serviços simultaneamente
- 🧪 Debug All Tests: Debug todos os testes simultaneamente
- 🚀🧪 Debug Services + Tests: Debug serviços e testes ao mesmo tempo
- Breakpoints: Clique na linha para adicionar breakpoints
- Variables: Use o painel de variáveis para inspecionar valores
- Call Stack: Veja a pilha de chamadas durante o debug
- Console: Use
console.log()ou o console integrado - Debug Simultâneo: Use configurações compound para debug múltiplo
F5: Iniciar debug- Ctrl+Shift+D: Abrir painel de debug
- Selecionar: Qualquer configuração individual ou compound
As dependências comuns estão no package.json raiz:
- TypeScript
- ESLint
- Prettier
- @types/node
- Scripts de desenvolvimento
Cada serviço tem suas dependências específicas no próprio package.json:
- tsx (para desenvolvimento)
- Vitest (para testes)
Recomendado instalar as extensões:
- ESLint
- Prettier
- TypeScript Importer
- Drizzle ORM
- REST Client
O projeto já inclui:
.eslintrc.js- Regras de linting.prettierrc- Formatação de códigotsconfig.base.json- Config TypeScript base.vscode/launch.json- Configurações de debug.vscode/tasks.json- Tasks do VS Code
pnpm docker:up# Build das imagens
docker-compose build
# Deploy
docker-compose -f docker-compose.prod.yml up -dO projeto inclui uma suíte completa de testes de integração que valida o funcionamento dos serviços em cenários reais.
# Teste básico (recomendado para início)
pnpm run test:integration tests/integration/basic-containers.test.ts
# Todos os testes de integração
pnpm run test:integration
# Modo desenvolvimento (watch)
pnpm run test:integration:watch
# Interface visual
pnpm run test:integration:ui
# Script de conveniência
./scripts/test-integration.sh --help- ✅ Infraestrutura: Containers PostgreSQL e RabbitMQ
- ✅ APIs: Criação, busca e atualização de pedidos/faturas
- ✅ Persistência: Dados salvos corretamente no banco
- ✅ Mensageria: Eventos publicados e consumidos via RabbitMQ
- ✅ Integração: Fluxo completo order-service → invoice-service
- ✅ Paginação: Filtros e paginação de resultados
- ✅ Validação: Schemas Zod e tipos TypeScript
- Docker Desktop rodando
- Node.js 22+ e pnpm 8+
- Dependências instaladas (
pnpm install)
📖 Documentação completa:
docs/TESTING.md
- Adicionar novos serviços:
pnpm new-service <name> - Implementar testes unitários: Adicionar Jest ou Vitest
- CI/CD: Configurar GitHub Actions
- Monitoramento: Adicionar logs e métricas com Prometheus/Grafana
- API Gateway: Implementar roteamento centralizado
- Autenticação: Adicionar JWT e autorização
- Event Sourcing: Implementar audit trail completo
- Dead Letter Queue: Adicionar tratamento de falhas em eventos
- Load Balancing: Configurar múltiplas instâncias dos serviços
- Observabilidade: Adicionar tracing distribuído com Jaeger
- Fork o projeto
- Crie uma branch:
git checkout -b feature/nova-feature - Commit:
git commit -m 'Add nova feature' - Push:
git push origin feature/nova-feature - Abra um Pull Request
MIT License - veja LICENSE para detalhes.