PROJETOS / 2026
Sales Project
Uma API de vendas em .NET com DDD, CQRS via MediatR e eventos publicados no RabbitMQ. Desconto por quantidade calculado no domínio, soft delete e nada de regra de negócio escondida no controller.
VISÃO GERAL
Uma API REST para um sistema de vendas: usuários, produtos, filiais e vendas com seus itens. A regra central está nas vendas — o desconto é calculado automaticamente pela quantidade de itens idênticos, o total é recalculado a cada alteração e o preço usado é sempre o do produto no momento da venda.
CONCEITO
DDD com CQRS e eventos. O domínio concentra entidades e regras e não depende de nada; cada caso de uso é um comando com seu handler, validador e mapeamento, despachado pelo MediatR. Toda mudança relevante — venda criada, modificada, cancelada, itens cancelados — vira um evento publicado no RabbitMQ via Rebus, então outros sistemas podem reagir sem que a API saiba quem são eles.
FUNCIONALIDADES
- CRUD de usuários, produtos, filiais e vendas
- Desconto por quantidade: 10% de 4 a 9 itens, 20% de 10 a 20, bloqueio acima disso
- Itens removidos numa atualização são cancelados, não apagados
- Soft delete e reativação de vendas
- Paginação e filtros por nome, status e período
- Eventos de domínio publicados no RabbitMQ
- Logging estruturado com Serilog e tratamento global de exceções
COMO FUNCIONA
A solução é dividida em WebApi, Application, Domain, ORM, IoC e Common. A requisição chega na WebApi, vira um comando validado com FluentValidation e segue para o handler na Application, que aplica as regras do Domain, persiste pelo repositório no PostgreSQL com EF Core e publica o evento. Tudo sobe com Docker Compose: API, banco e RabbitMQ.
TECNOLOGIAS
- CSharp
- DotNet
- PostgreSQL
- RabbitMQ
- Docker