Kawhan Laurindo

WHOISKAWHAN / SOFTWARE ENGINEER / João Pessoa

Idioma

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
Voltar para o portfólio