šŸ›’ Product

API para o cadastro de produtos. A documentaĆ§Ć£o da API e desse readme foi feita em portuguĆŖs para facilitar a leitura. Todo o resto, foi feito em inglĆŖs.

Eu defini tambƩm um Continuous Integration utilizando o GitHub Actions para me auxiliar na parte dos testes.

šŸŽÆ ConsideraƧƵes do Desafio

Status Codes

A parte de validaĆ§Ć£o de campos, junto com o corpo da resposta mostrando o id poderia ser simplificada e removida, jĆ” que a prĆ³pria resposta jĆ” possui um status code. HĆ” casos onde isso seria interessante, mas nesse projeto, para o Ć­nicio, eu nĆ£o vejo como isso poderia ser Ćŗtil.

Criteria

A criteria e o uso dela foi feito de forma bem explĆ­cita, definindo que o Product deveria ser o model principal. Caso houvesse a introduĆ§Ć£o de novos models, essa classe poderia passar a ser genĆ©rica para comportar tipos diferentes.

šŸ¤” Overall do Projeto e ConsideraƧƵes

O projeto foi majoritariamente feito para ser simples. De implementaĆ§Ć£o simples e execuĆ§Ć£o simples. Por isso, optei pelo banco em memĆ³ria H2 para subir a aplicaĆ§Ć£o ao invĆ©s de definir um banco de dados SQL ou NOSQL.

ā« Desempenho da AplicaĆ§Ć£o

NĆ£o houve a preocupaĆ§Ć£o em desempenho dentro da aplicaĆ§Ć£o, mas, caso isso virasse realidade, poderiamos concentrar nossos esforƧos em remover as utilizaƧƵes frequentes da Streams API, visto que elas trazem problemas de desempenho.

O mĆ©todo de pesquisa por meio das queries Ć© feito buscando apĆ³s filtrar todas as entidades. Uma classe poderia ser criada para tratar isso de forma inteligente ou utilizar algum buscador como o Sonic ou o Algolia.

Outro ponto interessante, Ć© que o SpringBoot utiliza o servidor TomCat como configuraĆ§Ć£o padrĆ£o. E o servidor, por sua vez, trabalha de forma sĆ­ncrona e bloqueante. Para resolver o problema de multiplas requisiƧƵes, poderiamos optar por uma soluĆ§Ć£o reativa utilizando o WebFlux junto com o servidor Netty.

ā© Escalabilidade da AplicaĆ§Ć£o

Para a escalabilidade da aplicaĆ§Ć£o, poderiamos trabalhar com o Docker. Ele nos possibilitaria containerizar a aplicaĆ§Ć£o tornando a instalaĆ§Ć£o em novos ambientes prĆ”tica e rĆ”pida. Caso houvesse a necessidade de mĆŗltiplos ambientes e alta disponibilidade, poderiamos utilizar um orquestrador de containers como o Kubernetes para melhorar ainda mais a experiĆŖncia.

āœ… Executando a AplicaĆ§Ć£o

  1. Clone localmente esse repositĆ³rio pelo comando git clone https://github.com/ianguuima/products.git
  2. Abra com o melhor editor existente (IntelliJ, Ć© claro)
  3. Execute a aplicaĆ§Ć£o.

Nenhuma configuraĆ§Ć£o adicional Ć© requerida.

šŸ“° DocumentaĆ§Ć£o

A API foi feita utilizando o Swagger V2. Abaixo, algumas prints.

img1 img2