A alguns meses atrás passei por um processo seletivo de um grande banco nacional, como parte do processo, um teste foi submetido para execução. Achei muito interessante as atividades propostas e também gostei do resultado alcançado, então como parte dos meus objetivos pessoais e profissionais, vou compartilhar o conteúdo gerado.

Me baseei nas fases da metodologia Processo Unificado para estruturar as etapas de trabalho. Concepção, Elaboração, Construção e Transição são as Quatro fases da metodologia e ajuda a organizar e estruturar os trabalhos.

Prazo: 2 dias
Recomendação: Utilizar do docker para montagem do ambiente;
Atividades:

  1. Elabore um plano de trabalho.
  2. Crie uma aplicação, em qualquer linguagem, para coletar as últimas postagens do Twitter, dada uma determinada #tag.
  3. Modele e implemente uma base de dados para armazenar as informações.
  4. Colete e armazene as mensagens, na base de dados, para as #tags listadas: #openbanking, #apifirst, #devops, #cloudfirst, #microservices, #apigateway, #oauth, #swagger, #raml, #openapis
  5. Utilizando uma linguagem de sua preferência, sumarize e grave os dados para conseguir listar as informações:
    • Quais são os 5 (cinco) usuários, da amostra coletada, que possuem mais seguidores?
    • Qual o total de postagens, agrupadas por hora do dia (independentemente da #hashtag)?
    • Qual o total de postagens para cada uma das #tag por idioma/país do usuário que postou;
  6. Crie uma API REST, em Java, que permita o consumo dos três itens anteriores.
  7. Exponha a API no API Gateway (Axway, APIgee ou similar);
  8. Crie uma página em Angular ou React que chame as API’s e mostre os resultados.
  9. Relatório Técnico explicando de forma sumarizada, considerando:
    • Plano de Trabalho (previsto e realizado)
    • Tecnologias utilizadas
      • Linguagens, Versões, IDE’s, SO’s
    • Diagrama de arquitetura
    • Modelagem da base de dados
    • Diagrama de implantação da solução
    • Publique os códigos gerados, em seu perfil do https://github.com/
    • Referências utilizadas Demais itens que você julgar relevante (Framework ou técnicas de teste, metodologias, etc.)
    • Se foi utilizado o Docker, para montagem do Ambiente, publique em seu perfil do http://hub.docker.com as imagens finais

Plano de Trabalho:

Plano de Trabalho

Plano de Trabalho

As atividades que foram concluídas dentro do estimado foi acarretada pelo conhecimento da tecnologia e experiência em projetos e estudos realizados anteriormente. Já para a atividade que não foi concluída e as que foram executadas com o tempo superior, o motivo é exatamente o oposto do anterior, falta de conhecimento, experiência da matéria e subestimação de tempo.

Tomei a liberdade diante o cenário solicitado em levantar e descrever os requisitos Funcionais e não Funcionais do teste.

Requisitos:

  1. Funcionais
    • Listar os Cinco usuários que possuem mais seguidores;
    • Contabilizar as postagens independente da hashtag por hora do dia;
    • Contabilizar o total de mensagens de cada hashtag por idioma ou país do usuário que postou;
    • As informações coletadas deverão ser apresentadas em uma página WEB;
  2. Não Funcionais
    • As APIs construídas deverá ser expostas utilizando um API gateway com OAuth 2.0;
    • As APIs deveram ser implementadas utilizando a arquitetura REST;
    • As APIs para exposição das informações devem ser implementadas com a linguagem Java;
    • Os dados capturados devem ser sumarizados e posteriormente gravados na base de dados.
    • As informações retornadas pelas APIs construídas serão no formato JSON;
    • A pagina web para apresentação das informações retornadas pelas APIs deverá ser implementada utilizando Angular ou React;
    • Um banco de dados relacional deverá ser usado para armazenar as informações coletadas;
    • O banco de dados H2 será utilizado;

Não conhecia as APIs do Twitter, logo precisei estudar e descobrir como consumir. E criei um tópico sobre:

APIs do Twitter:
Identifiquei que o consumo das APIs do Twitter pode ser realizado de Duas maneiras, então categorizei elas da seguinte maneira: Execução Explícita e Execução Implícita

  1. Execução Explícita
    • A execução de maneira explícita se da ao fato de ter que implementar o acesso aos endpoints das APIs por codificação do zero, ou seja, ter que criar os objetos de requisições, retorno, classes de acesso aos endpoints, aplicar os valores ao cabeçalho manualmente, tratar os retornos entre outros;
  2. Execução Implícita
    • Por outro lado, a execução implícita pode ser realizada com o uso da biblioteca Java Twetter4j. Apesar de não ser uma biblioteca oficial, ela facilita o consumo das APIs, traz produtividade e atende aos requisitos. Basta incluir a dependência desta biblioteca ao projeto, instanciar a classe de acesso e chamar os endpoints desejados que o processo de transformação dos objetos de entrada e saída das APIs já foram implementados por esta biblioteca Java que também foi a linguagem escolhida para as implementações.

Diagrama de Arquitetura:

Diagrama de Arquitetura

Diagrama de Arquitetura

Modelagen da Base de Dados:

Modelagem da Base de Dados

Modelagem da Base de Dados

Diagrama de Implantação:

Diagrama de Implantação

Diagrama de Implantação

Tecnologias Utilizadas:

  • IDE IntellJ 2018.1.1
  • Linguagem de programação Java 8;
  • Spring boot e data framework 1.5.18.RELEASE;
  • Biblioteca Lombok;
  • Biblioteca Twetter4J;
  • Biblioteca Apache Commons-lan3;
  • Apache Maven 3.5.3;
  • Sistema Operacional macOS Mojave 10.4
  • Banco de dados em memória H2;
  • React JS 15.0.1
  • JQuery 3.1.1
  • Bootstrap 3.3.7
  • Postman;
  • Swagger 2.9.2
  • Heroku como PaaS
  • Amazon API Gateway

Repositório GitHub:

As implementações esta organizada em Dois módulos, os artefatos da aplicação web (frontend) e os artefatos para as APIs (backend), por este motivo o repositório também esta dividido em Dois, são eles:

Repositório Docker Hub:

Tela para apresentação das Informações:

5 Usuários com mais seguidores

5 Usuários com mais seguidores

Postagens por Hora

Postagens por Hora

Postagens por Idioma

Postagens por Idioma

Referências utilizadas:

E este foi o resultado do trabalho. Pelo curto tempo dado para a resolução, construção e documentação do teste, fiquei contente com resultado alcançado.

Para executar o projeto com o Docker, é necessário ter instalado o Docker na máquina e baixar as Duas imagens do Docker Hub. Para baixar faça o pull das imagens:

 
docker pull edneiparmigiani/bluelimit-test-case-backend 
docker pull edneiparmigiani/bluelimit-test-case-frontend 

Não é obrigatório baixar as imagens para rodar o projeto. No momento que executar o comando up ou start no compose, se as imagens não existir, um utilitário do Docker vai fazer os Downloads das imagens automaticamente e subir a aplicação.

Para rodar, crie um arquivo com o nome bluelimit-compose.yml com o conteúdo abaixo (docker compose):

version: '3'
services:
 frontend:
    image: edneiparmigiani/bluelimit-test-case-frontend
    container_name: bluelimit-frontend
    ports:
      - "8080:8080"
    depends_on:
      - backend
 backend:
    image: edneiparmigiani/bluelimit-test-case-backend
    container_name: bluelimit-backend
    ports:
      - "8085:8085"

Após ter criado o arquivo bluelimit-compose.yml, execute o comando:

 
docker-compose -f bluelimit-compose.yml up 

Aguarde alguns segundos para a inicialização completar e a aplicação estará disponível pelos endereços:

Página WEB: http://localhost:8080/index.html
Documentação das APIs: http://localhost:8085/bluelimit/api/v1/swagger-ui.html

Fiquem a vontade para enviar críticas, sugestões e correções sobre o conteúdo gerado, baixar os códigos fontes e imagens Docker dos repositórios descritos acima. Em um próximo post vou mostrar a publicação dos projetos no Heroku e a exposição das APIs no AWS API Gateway.

Por enquanto é isso, até o próximo post

 

Deixe um comentário

Campos obrigatórios são marcados *

Post Navigation