Service Marketplace é uma API REST production-ready que simula um marketplace completo de serviços, onde clientes criam solicitações e prestadores enviam propostas competitivas. O projeto demonstra práticas avançadas de arquitetura de software, integrando serviços AWS locais (via LocalStack) e preparado para deploy em Kubernetes.
- 🏗️ Clean Architecture com separação clara de camadas (Domain, Application, Infrastructure, Presentation)
- 🎯 Princípios SOLID aplicados rigorosamente em todos os módulos
- ☁️ Infrastructure as Code com Terraform
- 📦 Upload de Arquivos para S3 com Presigned URLs
- 🔔 Sistema de Notificações preparado (SNS + SES)
- 🐳 LocalStack completo para desenvolvimento local
- ☸️ Kubernetes-ready com manifests completos e auto-scaling
- 🚀 Docker Compose para setup rápido
| Backend | Database | Storage | Messaging | DevOps |
|---|---|---|---|---|
| NestJS | DynamoDB | Amazon S3 | SNS + SES | Docker |
| TypeScript | LocalStack | Terraform | Kubernetes | Node.js |
graph TB
subgraph "Client Layer"
A[API Gateway / Ingress]
end
subgraph "Application Layer"
B[NestJS API]
B1[Auth Module]
B2[Services Module]
B3[Requests Module]
B4[Proposals Module]
B5[Media Module]
end
subgraph "Infrastructure Layer - LocalStack"
C[DynamoDB]
D[S3 Bucket]
E[SNS Topics]
F[SES]
end
A --> B
B --> B1
B --> B2
B --> B3
B --> B4
B --> B5
B1 --> C
B2 --> C
B3 --> C
B4 --> C
B5 --> C
B5 --> D
B3 -.->|Events| E
B4 -.->|Events| E
E -.->|Notifications| F
style B fill:#e0234e
style C fill:#4053d6
style D fill:#569a31
style E fill:#ff9900
style F fill:#dd344c
Autenticação e autorização com JWT
- Login/Register com bcrypt
- Refresh Token
- JWT Strategy com Passport
- Guards para proteção de rotas
Gerenciamento completo de usuários
- Criação de contas (CLIENT/PROVIDER)
- CRUD completo com validação
- Perfis diferenciados por tipo
- Integração com Auth
Catálogo de serviços do marketplace
- CRUD completo de serviços
- Categorização e busca
- Serviços ativos/inativos
- Validação de unicidade de nome
Solicitações de clientes
- Criar e gerenciar solicitações
- Status tracking:
OPEN→IN_NEGOTIATION→CLOSED→CANCELLED - Busca por cliente, serviço e status
- Query otimizada via GSI1 e GSI2
Propostas de prestadores
- Criar e listar propostas
- Status:
PENDING→ACCEPTED/REJECTED/WITHDRAWN - Busca por request e provider
- Relacionamento N:1 com Requests
Upload e gerenciamento de arquivos
- Upload para S3 com validação
- Presigned URLs temporárias
- Suporte: Imagens, PDFs, Vídeos, Áudio
- Hash SHA256 e metadata
- Paginação com cursor
- Associação com Requests
Sistema de notificações (preparado)
- SNS Topics configurados
- Templates SES para emails
- Eventos: Nova proposta, Request criado
- Pronto para Lambda triggers
src/
├── modules/
│ ├── auth/ # ✅ Autenticação JWT
│ │ ├── presentation/ # Controllers, DTOs, Guards
│ │ ├── application/
│ │ │ └── use-cases/ # Login, Register, Refresh
│ │ ├── domain/
│ │ │ ├── entities/ # Token Payload
│ │ │ └── interfaces/ # Token Service
│ │ └── infrastructure/
│ │ ├── strategies/ # JWT Strategy
│ │ └── services/ # Token Service
│ │
│ ├── users/ # ✅ Gerenciamento de usuários
│ ├── services/ # ✅ Catálogo de serviços
│ ├── requests/ # ✅ Solicitações
│ ├── proposals/ # ✅ Propostas
│ └── media/ # ✅ Upload de arquivos
│ ├── domain/
│ │ ├── entities/ # Media
│ │ └── interfaces/ # S3 Service, Repository
│ ├── infrastructure/
│ │ ├── services/
│ │ │ ├── s3.service.ts # ✅ AWS S3
│ │ │ └── validation.service.ts # ✅ File validation
│ │ └── repositories/
│ └── application/use-cases/
│ ├── upload-media.use-case.ts # ✅ Upload + Hash
│ ├── list-media.use-case.ts # ✅ Paginação
│ └── delete-media.use-case.ts # ✅ Delete S3 + DB
│
├── database/ # ✅ DynamoDB config
└── shared/ # Config, Utils
Total: 6 módulos completos, 50+ arquivos
| Princípio | Aplicação no Projeto |
|---|---|
| Single Responsibility | Cada use-case tem UMA responsabilidade (ex: UploadMediaUseCase) |
| Open/Closed | Novos módulos são extensões, código existente não é modificado |
| Liskov Substitution | Repositórios implementam interfaces e são intercambiáveis |
| Interface Segregation | Interfaces específicas (IMediaRepository, IS3Service) |
| Dependency Inversion | Dependemos de abstrações (interfaces), não implementações |
- ✅ Auto-scaling horizontal no Kubernetes
- ✅ Health checks e self-healing
- ✅ Presigned URLs para acesso seguro ao S3
- ✅ Paginação com cursor (lastKey)
- ✅ Validação de arquivos (tipo, tamanho, extensão)
- ✅ Hash SHA256 para integridade de arquivos
- ✅ Rollback automático em falhas de upload
- ✅ Infrastructure as Code (Terraform)
- ✅ Service discovery no Kubernetes
- ✅ Load balancing automático