Skip to content

Latest commit

 

History

History
123 lines (82 loc) · 5.49 KB

README.md

File metadata and controls

123 lines (82 loc) · 5.49 KB

Inventário

Este é um projeto ASP.NET 8.0 que pode ser executado utilizando Docker Compose ou diretamente em sua máquina local.

Pré-requisitos

O Projeto é preparado para rodar em ambiente Windows e Linux

Para rodar em Docker:

Para rodar na máquina local:

Passo a passo

Rodar com Docker Compose

1. Clonar o repositório

Clone este repositório para sua máquina local:

git clone https://github.com/miguelkmarques/Inventory.git
cd Inventory/

2. Construir e iniciar os containers

No diretório raiz do projeto, execute os comandos abaixo para rodar o Build e iniciar os Containers:

docker-compose -f docker-compose.yml -f docker-compose.override.yml build
docker-compose up -d

3. Acessar a aplicação

  • Após o Build e inicialização, a aplicação estará disponível em http://localhost:8080.
  • O Swagger da aplicação está disponível em http://localhost:8080/swagger/index.html

4. Parar e remover os containers

Para parar e remover os containers, execute:

docker-compose down

Rodar sem Docker Compose

1. Clonar o repositório

Clone este repositório para sua máquina local:

git clone https://github.com/miguelkmarques/Inventory.git
cd Inventory/InventoryVenturus/

2. Configurar a conexão com MySQL

Certifique-se de que o MySQL está instalado e em execução. Atualize a string de conexão no arquivo appsettings.Development.json:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost;Database=InventoryVenturusDb;User=user;Password=password"
}

3. Restaurar pacotes

No diretório InventoryVenturus onde está o InventoryVenturus.csproj, execute os seguintes comandos:

dotnet restore
dotnet build
dotnet run

4. Acessar a aplicação

  • A aplicação estará disponível em http://localhost:5129.
  • O Swagger da aplicação está disponível em http://localhost:5129/swagger/index.html

5. Rodar Testes Unitários

Volte para a pasta raiz do projeto e execute o comando:

dotnet test InventoryVenturus.Tests/InventoryVenturus.Tests.csproj

GitHub Action

O projeto possui um workflow do GitHub Actions que executa os testes unitários e gera relatórios de testes e cobertura. Aqui estão os links para a última execução do workflow e seus respectivos relatórios:

Decisões Técnicas

Desenvolvimento do Projeto de Controle de Estoque

  • Para o desenvolvimento do Projeto de Controle de Estoque, foi utilizada a biblioteca MediatR para seguir o padrão de arquitetura CQRS. Cada funcionalidade (Product, Stock, Transaction) foi separada em Commands, Dtos, Notifications e Queries.
  • Foram desenvolvidos Behaviors para serem adicionados na pipeline de execução do MediatR:
    • ValidationBehavior: para cada Command e Notification, o input é validado para garantir a integridade dos dados, usando a biblioteca FluentValidation.
    • RequestResponseLoggingBehavior: para cada Command, é realizado o log da Request e da Response.
    • ExceptionLoggingBehavior: cada Exception gerada dentro do MediatR é registrada no banco de dados, juntamente com a Request e a Exception.
  • Foi implementada uma BaseException e exceções customizadas para tratar erros originados na lógica da aplicação.
  • No middleware do AspNet, foi adicionada uma GlobalExceptionHandler para centralizar o tratamento de exceções e padronizar o retorno dos erros para requisições HTTP que não tiveram sucesso. Esse handler incrementa os dados do erro quando se trata de FluentValidation.ValidationException e BaseException.
  • Foi utilizado o Micro ORM Dapper e criada uma pasta de Repository para todas as operações de banco de dados.
  • Para os Commands que necessitam realizar mais de uma operação, como executar a operação principal e publicar uma notificação que pode desencadear outra operação usando um repositório, foi utilizado o TransactionScope. Caso alguma operação falhe dentro do escopo criado, as operações que anteriormente tiveram sucesso são revertidas. Exemplo: ao consumir o estoque de um produto, a operação de atualizar o estoque no repositório é executada e é enviada uma notificação para criar um registro na tabela de Transactions. Se a operação de salvar a Transaction falhar, o estoque do produto não será atualizado devido ao erro. Isso garante a integridade dos dados.
  • Cada componente de código da aplicação foi desenvolvido com foco na testabilidade, facilitando o desenvolvimento de testes unitários e seguindo o padrão TDD.
  • Para o escopo deste desafio, os endpoints e as tabelas de banco de dados foram simplificados, apenas para demonstrar a aplicação dos conceitos e tecnologias, e não representam um sistema real.