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.