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.
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.
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.
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.
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.
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.
- Clone localmente esse repositĆ³rio pelo comando git clone https://github.com/ianguuima/products.git
- Abra com o melhor editor existente (IntelliJ, Ć© claro)
- Execute a aplicaĆ§Ć£o.
Nenhuma configuraĆ§Ć£o adicional Ć© requerida.
A API foi feita utilizando o Swagger V2. Abaixo, algumas prints.