Mini API para criação e resgate de vouchers promocionais, seguindo princípios de Domain-Driven Design (DDD) e boas práticas com NestJS.
- Funcionalidades
- Como rodar o projeto
- Testes
- Documentação Swagger
- Decisões de Arquitetura
- Estrutura de Pastas
- Criar voucher promocional (código único, valor, tipo, expiração opcional)
- Resgatar voucher (impede múltiplos usos, valida expiração e existência)
cd api-voucher
npm install
npm run start:devA API estará disponível em http://localhost:3000.
npx vitest runnpm run test:e2eAcesse a documentação interativa em: http://localhost:3000/swagger
- DDD: Separação clara em camadas: Domain (entidade, repositório), Application (use-cases), Infrastructure (repositório in-memory), Interface (controllers, DTOs, módulo).
- Validação: Uso de
class-validatornos DTOs para garantir integridade dos dados de entrada. - Swagger: Documentação automática dos endpoints com exemplos e schemas.
- Testes: Unitários para lógica de domínio e use-cases (Vitest). E2E para endpoints reais (Jest/Supertest).
- Persistência: Implementação in-memory para simplificação, facilmente substituível por banco real.
- Tratamento de erros: Respostas HTTP adequadas (400, 404) para falhas de negócio.
src/
domain/ # Entidade Voucher e interface do repositório
application/ # Use-cases (criação e resgate)
infrastructure/ # Repositório in-memory
vouchers/ # Controller, DTOs, módulo
POST /vouchers
{
"code": "PROMO10",
"value": 10,
"type": "fixed",
"expiresAt": "2024-12-31T23:59:59.000Z"
}POST /vouchers/PROMO10/redeemProjeto desenvolvido para avaliação técnica. Dúvidas ou sugestões, fique à vontade para entrar em contato.