Skip to content

This repo contains a front-end challenge proposed by iClinic

License

Notifications You must be signed in to change notification settings

leoronne/whats-my-path

Repository files navigation


Este arquivo também está disponível em outros idiomas: Inglês.


Projeto   |    Techs   |    Informações Gerais   |    Instalação   |    Inicialização   |    Testes   |    Licença



Projeto 🌟

Esse repositório contêm um desafio front-end proposto pela iClinic.

O propósito da aplicação é mostrar ao usuário em qual lado da Força ele faz parte e qual o seu mestre, com base no tempo de resposta de duas requisições à SWAPI (uma API do Star Wars) - o determinante aqui é qual requisição retorna os dados primeiro.

Há duas opções para o alinhamento/mester:

  • Luz, o mestre será Luke Skywalker;
  • Sombrio, o mestre será Darth Vader.

Hospedado aqui.


Techs 🚀


Informações Gerais ℹ️

Como explicado acima, o alinhamento/mestre é definido por qual requisição é finalizada primeiro, para atingir isso foi utilizado Promise.race(). O serviço que fica responsável por essas requisições foi separado dentro da pasta src/services, para individualizar a sua responsabilidade e facilitar nos testes unitários.

Para determinar o alinhamento, foi implementado uma regra que compara a URL da resposta da Promise.race, já que no endpoint que retorna os dados do mestre não há uma propriedade indicando o alinhamento dele.

O alinhamento é utilizado dentro da aplicação para definir a UI das telas (cores, em específico), ao invés de usar diretamente o nome do mestre.

Os dados de alinhamento/mestre e loading das requests ficam dentro do hook usePeople para poder compartilhar os dados entre os componentes que os utilizam, assim como à função que chama o serviço define-master.

Enquanto a aplicação faz as requisições, os botões ficam desativados e o texto é substituído por um spinner para melhorar a experiência do usuário, também é apresentado uma notificação que indica ao usuário qual alinhamento ele faz parte ou caso ocorra algum erro no fluxo.

Na página onde apresenta qual é o mestre, há uma regra que redireciona o usuário para página inicial caso ele não tenha iniciado o fluxo através da página inicial. Isso foi implementado para impedir que o usuário acesse diretamente a rota /master e fazer com que o processo sempre deva iniciar na página inicial através do botão "Start" (eliminando a necessidade do useEffect toda vez que ele acessa a rota, seja recarregando a página ou acessando ela diretamente).

No entanto, ele consegue redefinir seu alinhamento/mestre clicando no botão choose your path again, Padawan, como orientado na descrição do desafio.

Foi implementado uma página adicional caso o usuário tente acessar uma rota inexistente, ela evidencia que a página tentando ser acessada não existe e contém um link que redireciona o usuário para a página inicial.


gravac__a__o_de_tela_2021-10-09_a__s_16.18.41_1.mp4

gravac__a__o_de_tela_2021-10-09_a__s_16.21.01_1.mp4

gravac__a__o_de_tela_2021-10-09_a__s_16.22.11_1.mp4

Instalação 🔧

Primeiro clone o projeto utilizando git clone https://github.com/leoronne/whats-my-path.git e depois instale as dependências utilizando yarn no seu terminal (no diretório raiz do projeto).


Inicialização 🔛

Para iniciar a aplicação, utilize yarn start no seu terminal.

Nota: Lembre-se de criar um arquivo .env no diretório raiz do projeto baseado no arquivo de exemplo.


Testes ✔️

Para rodar os tests dessa aplicação, utilize o comando yarn test no seu terminal. Caso você deseje gerar os arquivos de cobertura dos testes, utilize yarn test:cover.


Licença 📝

License