Coder Social home page Coder Social logo

ldfagrupaprodutos's Introduction

API para agrupamento de produtos para Marketplace

Desafio realizado por Fabrício L. Ribeiro como teste para seleção de desenvolvedor para o Luizalabs.

Data de recebimento do desafio: 14/07/2018

Data de conclusão: 21/04/2018

Fazendo o setup da aplicação

Para fazer o setup da aplicação, primeiramente certifique-se de ter o Java na versão 8 em seu ambiente:

  # java -version
  java version "1.8.0_172"
  Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
  Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

Depois disso, faça um clone do repositório git:

  # mkdir ldf
  # cd ldf
  # git clone https://github.com/flribeiro/LdfAgrupaProdutos.git

Já será possível executar a aplicação via linha de comando a partir do maven:

  # mvnw spring-boot:run

Como alternativa, é possível executar a aplicação diretamente através do JAR file disponível:

  # java -jar luizalabs-desafio-fabricio-0.0.1-SNAPSHOT.jar

A aplicação estará respondendo através do endereço http://localhost:8080/ldf/grouping.

Implementação

API desenvolvida em Java com Spring Boot, utilizando como IDE o IntelliJ IDEA da JetBrains. Foi utilizado o Maven para o gerenciamento do projeto.

Arquitetura

O projeto foi implementado no modelo MVC, onde um controller (a classe LdfController) recebe as requisições HTTP e submete o processamento dos dados recebidos para uma camada service. Dado o fato de a API ser um serviço auxiliar, não houve necessidade de persistir os dados, portanto não há uma camada de persistência.

Decisões de implementação:

  • Para evitar inconsistências no resultado esperado, eu considerei que, ao receber produtos com EANs iguais e marcas diferentes, meu algoritmo consideraria como sendo de mais provável procedência o EAN cuja marca contivesse mais produtos na lista recebida;
  • Também para evitar inconsistências, o método do service que faz validação dos produtos recebidos desconsidera aqueles produtos que porventura trazem na descrição uma marca diferente do atributo brand;
  • Os testes de toda a classe do service (ProductGroupingSvc) estão implementados e resultando em OK.

Possíveis melhorias:

Muito poderia ser melhorado se eu tivesse mais tempo. Exemplo:

  • Eu pretendia implementar mensagens de erro a serem retornadas no atributo errors da classe Response, mas gastei muito tempo adequando a lógica para os algoritmos de ordenação e agrupamento, e decidi priorizar a responsividade;
  • Também seria interessante implementar testes não só para a lógica da aplicação, mas também para o controller. Mas pra isso eu gostaria de ter implementado as respostas de erro a serem devolvidas pela API.

Considerações finais:

Agradeço imensamente a oportunidade de participar do processo de seleção, e realizar este desafio. Reconheço minhas limitações técnicas por ser, como disse na entrevista, iniciante em desenvolvimento. Mas tenho muita sede de aprender, e realizar este pequeno projeto foi um desafio muito benéfico, pois a necessidade de pesquisa e uma boa demanda são os principais combustíveis para o meu aprendizado. Espero continuar crescendo aí, junto com vocês.

ldfagrupaprodutos's People

Watchers

James Cloos avatar Fabrício Ribeiro avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.