Este projeto segue uma arquitetura modular inspirada em Clean Architecture, com separaรงรฃo por domรญnios, uso de Orchestrators, DTOs, Repositories, Services e integraรงรฃo com Mercado Pago e DataImpulse.
- Node.js + TypeScript
- Express
- Prisma ORM
- PostgreSQL (via Docker)
- bcrypt (hash de senha)
- JWT (autenticaรงรฃo)
- Zod (validaรงรฃo)
- Mercado Pago SDK
- Axios (requests externos)
- Docker Compose
- Modular Monolith
- Repository Pattern
- Service Layer
- Orchestrator Pattern
- DTO Pattern
- Dependency Injection (Containers)
- Global Error Handling
- Middleware Layer
- Integration Layer (Mercado Pago / DataImpulse)
/src
โโโ core
โ โโโ middlewares
โ โ โโโ auth.middleware.ts
โ โ โโโ validate.ts
โ โโโ errors
โ โโโ AppError.ts
โ โโโ errorHandler.ts
โ
โโโ modules
โ โโโ auth
โ โ โโโ AuthController.ts
โ โ โโโ AuthService.ts
โ โ โโโ AuthRepository.ts
โ โ โโโ AuthOrchestrator.ts
โ โ โโโ AuthContainer.ts
โ โ โโโ AuthRoutes.ts
โ โ โโโ dtos/
โ โ
โ โโโ proxy
โ โ โโโ ProxyController.ts
โ โ โโโ ProxyService.ts
โ โ โโโ ProxyContainer.ts
โ โ โโโ ProxyOrchestrator.ts
โ โ โโโ ProxyRepository.ts
โ โ โโโ ProxyRoutes.ts
โ โ
โ โโโ payments
โ โ โโโ PaymentController.ts
โ โ โโโ PaymentService.ts
โ โ โโโ PaymentRepository.ts
โ โ โโโ PaymentOrchestrator.ts
โ โ โโโ PaymentRoutes.ts
โ โ โโโ PaymentContainer.ts
โ โ โโโ mercadopago/createPixPayment.ts
โ โ
โ โโโ logs
โ โ โโโ LogsController.ts
โ โ โโโ LogsService.ts
โ โ
โ โโโ user
โ โ โโโ UserController.ts
โ โ โโโ UserService.ts
โ โ โโโ UserRepository.ts
โ โ โโโ UserOrchestrator.ts
โ โ โโโ UserContainer.ts
โ โ โโโ UserRoutes.ts
โ โ โโโ dtos/
โ
โโโ shared
โ โโโ prisma/client.ts
โ โโโ utils/
โ
โโโ config
โ โโโ prisma/client.ts
โ
โ
โโโ server.ts
Cada mรณdulo tem seu prรณprio repositรณrio:
AuthRepository.tsProxyRepository.tsPaymentRepository.ts
โ Objetivo: Centralizar acesso ao banco e isolar Prisma da regra de negรณcio.
Serviรงos contendo apenas lรณgica de negรณcio pura, sem Express, sem banco direto.
โ Exemplo:
- Autenticaรงรฃo (login)
- Criar usuรกrio proxy
- Criar compra PIX
- Validar cupom
- Ver histรณrico de compras
foi criado orquestradores para operaรงรตes complexas, como:
Fluxo do login:
- Autentica usuรกrio
- Cria usuรกrio no Proxy automaticamente (se precisar)
- Gera token
- Gera logs
Fluxo do registro:
- Registrar usuario usuรกrio
- Cria usuรกrio no Proxy automaticamente (se precisar)
- Gera token
- Gera logs
Fluxos:
- Criar compra (createPurchase)
- Processar compra via PIX
- Processar webhook do Mercado Pago
- Consumir proxyService + paymentService juntos
โ O orquestrador coordena vรกrios serviรงos sem os serviรงos conhecerem entre si.
Foi implementado:
class AppError {
constructor(
public message: string,
public statusCode = 400
) {}
}Captura erros lanรงados no service/orchestrator:
app.use((err, req, res, next) => {
if (err instanceof AppError) {
return res.status(err.statusCode).json({ message: err.message });
}
return res.status(500).json({ message: "Internal server error" });
});foi implementado:
authenticateTokenโ valida JWTvalidate()โ valida request body via Zod
Criados para padronizar body, params e retorno das rotas.
UserLoginDTO
foi implementado um sistema de logs com:
createLog()LogsServiceLogsController- Logs de login, pagamento, webhook, erros, etc.
eles serรฃo gravados em um banco de dados(temporario)
foi implementado:
- Criar pagamento PIX
- Buscar pagamento
- Webhook para confirmaรงรฃo
- Adicionar GB ao usuรกrio apรณs pagamento aprovado
- Limpar cooldown apรณs sucesso
- Login
- Criaรงรฃo de cookie seguro
- Refresh implรญcito
- Bloqueio de usuรกrio
- Logs de tentativa de login
foi implementado:
- Validaรงรฃo de cupom
- Cupom de uso รบnico
- Cupom com minGb
- Cupom com validade
- Cupom por usuรกrio
๐ Licenรงa
MIT โ fique livre para usar e expandir.