Como | Quero | Para |
---|---|---|
Usuário | Disparar um evento de consumo | Ver os dados salvos imediatamente no banco de dados em tempo real |
Usuário | Gerar um relatório financeiro | Ver os dados em um documento PDF |
- Cada produto possui um valor de royalty3 e um threshold4
- O valor de royalty de todos os produtos é de 10% do preço do produto
- O valor de threshold de todos os produtos é de 50% de consumo de um produto
- Um usuário pode consumir um produto aos poucos, porém, até que chegue a um valor de consumo igual ou maior ao threshold, não haverá valores a serem pagos à distribuidora
- Cada produto possui um id, um título, um tamanho, uma distribuidora e um preço
- O produto possui apenas um preço que não varia com o tempo
- Os produtos possuem um tamanho medido em locations5
- Cada distribuidora disponibiliza um ou mais produtos
- Os dados de consumo são armazenados assim que o evento de consumo ocorre. Os dados são compostos pela data do consumo e a localização (em locations) de início e de fim daquele consumo
- Arquitetura
- API (com Swagger) - Antes siga os passos descritos abaixo em "Execute localmente"
A aplicação é composta por um Serviço construído em NodeJS e um Banco de Dados MongoDB, que, para fins de testes, pode rodar localmente em um Container Docker. Para instalar o Docker em uma máquina linux siga os passos descritos neste tutorial. Após instalação do Docker siga os passos descritos abaixo.
- Faça o download da imagem oficial do MongoDB e gere um container do Banco de Dados. Verifique se o container está em execução, e caso não esteja execute-o
# Caso esteja numa máquina Windows o path (/home/$USER/mongo/data/db),
# após o argumento -v precisará ser redefinido considerando a configuração
# de diretórios do sistema
docker container run -it --name mongodb -v /home/$USER/mongo/data/db:/data/db -p 27017:27017 -d mongo
# Veja se o container de nome "mongodb" está Up
docker container ps -a
# Caso não esteja em execução rode
docker container start mongodb
- Faça o download do projeto
git clone https://github.com/marcusviniciusfa/pilgrim-challenge-financial-report.git
- Na raiz do projeto execute os seguintes comandos
npm install
npm run dev
- Para executar em modo de teste usando o ts-node-dev- ou
npm start
- Para compilar o Typescript e rodar usando o node no diretório do código./dist
-
Para fazer as requisições utilize a documentação da API, que pode ser encontrada em http://localhost:3000/api/docs/
-
O relatório pode ser gerado à partir de duas visões distintas: em relação as Distribuidoras e os Royalties e em relação aos Produtos e os Royalties. Após adicionar alguns produtos e consumir os produtos gere um novo relatório na rota: http://localhost:3000/api/reports?type=products, use a query
type=products
outype=distributors
para escolher o tipo de relatório. Atenção! O relatório não estará disponível para acesso através da documentação no Swagger
-
O Typescript foi escolhido ao invés do Javascript puro por dois motivos:
- O pensamento inicial na construção desse projeto era usar o máximo de Clean Architecture com os princípios SOLID, pelos quais estou gostando muito ultimamente, começando a aprender. Pelo fato dos princípios possuírem uma perfeita harmonia com a Orientação a Objetos, resolvi começar com o TS (:x: Não teve continuidade porque não tenho maturidade no uso dos princípios, por tanto tive dificuldades para seguir)
- Por acreditar que Tipagens ajudam muito em projetos Back-end
-
Tentei iniciar com TDD mais não dei continuidade por questão de tempo e falta de maturidade no uso do Jest
-
Utilizei o padrão Conventional Commits, com a ajuda dos módulos commitlint e husky, além do lintstaged para auxiliar na automatização das verificações.
-
Utilizei o ESLint, Prettier e o .editorconfig para seguir bons padrões e formatação de código
-
Utilizei o C4 Model para criar Diagramas de estilo Zoom In/Zoom Out
-
Utilizei o Swagger para documentar a API
-
Utilizei configurações do VSCode para auxiliar na utilização de outras ferramentas e fazer Debug
-
Vou dar continuidade nos meus estudos sobre Arquitetura e Código Limpo, utilizando este projeto, através dos materiais (Cursos, vídeos no Youtube, Livros) de grandes feras como o Pessoal da Rocketseat, Otavio Lemos, Rodrigo Manguinho, Uncle Bob