ProcessoCalculoLucroVendedor

Objetivo

O objetivo desse projeto é simular um ambiente real de processamento de dados de venda. O software pode ser entendido em 3 partes distintas.

1. Simulação

Nessa fase, vendas simuladas são adicionadas no banco de dados com a flag Processado = false. A dinâmica pode ser observada no arquivo Dominio.Modelo.Venda.

  • São criadas de 100 a 500 vendas.
  • Os dados de venda são adicionados na tabela dbo.Venda.

Cada venda possui:

  • Status processado
  • Data da venda
  • Valor da venda
  • ID do vendedor
  • Enum da forma de pagamento

2. Processamento

Nessa etapa, os dados de venda com Processado = false são recuperados do banco de dados. Aplica-se a seguinte regra de negócio:

  • Vendedores bronze recebem um lucro de 10% no valor de cada venda.
  • Vendedores prata recebem um lucro de 20% no valor de cada venda.
  • Vendedores ouro recebem um lucro de 30% no valor de cada venda.

O cálculo é realizado no arquivo Utils.Calculos.CalculoLucro(...). O teste para esse cálculo está no arquivo TestesUnitarios.TesteCalculoLucro(...). Após o cálculo, a flag Processado é atualizada para true, indicando que a venda foi processada. A atualização ocorre no banco de dados e está descrita no arquivo ProcessoCalculoLucroVendedor.Servicos.ServicoVenda.Atualizar(...).

3. Mensageria

Após o processamento, uma mensagem é enviada para a fila ProcessoCalculo contendo informações sobre quantos dados foram processados e o GUID da operação.

Ao finalizar o processo, tudo se repete por recursão, simulando um ambiente de vendas que funciona 24 horas por dia. A recursão está em ProcessoCalculoLucroVendedor.Program.IniciarSimulacao(...).

Pré Requisitos para rodar

  1. Dotnet 7.0.1 SDK

  2. IDE - Visual Studio 2022 (sugestão)

  3. RabbitMQ

  4. Instalar dependências declaradas no projeto

    • Entity Framework, Entity Design, RabbitMQ client, etc.

Imagens do projeto rodando:

Logs no console:

image

Tabela de lucro:

image

Tabela de venda:

image

Tabela de vendedor:

image

Mensagens no rabbitMq:

-Fila:

image

-Mensagem:

image