Somos uma empresa que fazemos cotação de preços e precisamos de uma automação que possa buscar os preços em sites de venda. Nosso foco é achar os três menores preços de um determinado produto em um site de vendas e trazer suas informações para o cliente.
- Site de vendas: MercadoLivre (www.mercadolivre.com.br) ou similar
- Produto a ser pesquisado: Webcam
O projeto deve ser entregue atendendo os seguintes critérios:
- Java 8 ou 17
- Maven para gerenciar as dependências;
- Framework Spring (Spring Boot ou Spring MVC) para controle da aplicação;
- Utilizar framework Selenium com driver do Google Chrome;
- Utilização de LOGs em terminal, demonstrando a processo da aplicação;
- Disponibilizar o projeto, com instruções de execução, em um repositório git.
Fazer um clone do projeto:
git clone https://github.com/Elyson2k/finch-estagio.git
Já na pasta do projeto sua IDE de preferencia [ IntelliJ :), Eclipse :| ], abra o terminal e execute o seguinte comando:
docker-compose up -d
Isso fará com que o banco de dados da aplicação rode em um container Docker.
Baixe/Atualize as bibliotecas do projeto com Maven:
mvn clean install
Rodar testes da aplicação:
mvn test
Rode a aplicação pelo pelo IntelliJ, ou use o seguinte comando:
mvn spring-boot:run
A documentação Swagger OpenApi da aplicação estará disponivel em:
http://localhost:8080/swagger-ui/index.html
- springdoc-openapi-ui: Para fazer documentação com Swagger.
- mysql-connector-j: Connector para o MySql, funciona como um driver.
- com.h2database: Banco de dados em memória, para testes iniciais e para testes da aplicação.
- spring-boot-starter-web: Biblioteca básica que faz com que minha aplicação tenha um servidor embutido do tomcat e também da várias classes uteis para desenvolvimentop da minha aplicação Web.
- junit: Ferramenta para testes unitários.
- selenium-java: Ferramenta comumente usada para testes, mas usada no projeto para realizar a busca de informações no site desejado.
O Strategy é um padrão de projeto comportamental que permite que você defina uma família de algoritmos, coloque-os em classes separadas, e faça os objetos deles intercambiáveis.
Basicamente, ao invés de ter if else if aninhados, ou termos switch case, podemos fazer com que o nosso código consiga crescer sem que tenhamos que fazer alterações no código que já funciona. No problema desse projeto, projetei o sistema para suportar mais de um tipo de sistema a ser pesquisado. A implementação principal, feita e já funcionando foi para o site Mercado Livre, porém foi feita de modo que suporte outros sites, sem mecher no que já funciona. :]
Basicamente no projeto, temos dentro da pasta service a seguinte estrutura:
-- service
---- strategy
------ BrowseMercadoLivreService
------ BrowseService
------ BrowseServiceStrategy
Assim, com esse padrão de projeto, para cada vez que tiver uma nova implementação de algum site, crio um arquivo com o nome BrowseService, e faço a implementação desse site.
Referencia: https://refactoring.guru/pt-br/design-patterns/strategy