Relatório de Clima

Boas-vindas ao repositório do exercício Relatório de Clima

Para realizar o exercício, atente-se a cada passo descrito a seguir e se tiver qualquer dúvida, nos envie no Slack da turma! #vqv 🚀

Aqui, você vai encontrar os detalhes de como estruturar o desenvolvimento do seu exercício a partir desse repositório, utilizando uma branch específica e um Pull Request para colocar seus códigos.

Termos e acordos

Ao iniciar este exercício, você concorda com as diretrizes do Código de Conduta e do Manual da Pessoa Estudante da Trybe.

Entregáveis

🤷🏽‍♀️ Como entregar

Para entregar o seu exercício, você deverá criar um Pull Request neste repositório.

Lembre-se que você pode consultar nosso conteúdo sobre Git & GitHub e nosso Blog - Git & GitHub sempre que precisar!

👨‍💻 O que deverá ser desenvolvido

Neste projeto você vai implementar classes para gerar um relatório do tempo utilizando técnicas de injeção de dependência com o Spring framework.

📝 Habilidades a serem trabalhadas

Neste exercício, verificamos se você é capaz de:

  • Implementar endpoints RESTful utilizando o framework Spring
  • Criar classes DTO (Data Transfer Object) para transferir dados entre camadas ou sistemas
  • Implementar a camada de serviço para encapsular a lógica de negócio

Orientações

‼ Antes de começar a desenvolver
  1. Clone o repositório
  • Use o comando: git clone <url do repositório>
  • Entre na pasta do repositório que você acabou de clonar:
    • cd <nome do repositório>
  1. Instale as dependências

    • mvn install
  2. Crie uma branch a partir da branch main

  • Verifique que você está na branch main
    • Exemplo: git branch
  • Se você não estiver, mude para a branch main
    • Exemplo: git checkout main
  • Agora, crie uma branch à qual você vai submeter os commits do seu exercício:
    • Você deve criar uma branch no seguinte formato: nome-sobrenome-nome-do-exercício;
    • Exemplo: git checkout -b maria-soares-lessons-learned
  1. Crie na raiz do exercício os arquivos que você precisará desenvolver:
  • Verifique que você está na raiz do exercício:
    • Exemplo: pwd -> o retorno vai ser algo tipo /Users/maria/code/sd-0x-project-lessons-learned
  • Crie os arquivos index.html e style.css:
    • Exemplo: touch index.html style.css
  1. Adicione as mudanças ao stage do Git e faça um commit
  • Verifique que as mudanças ainda não estão no stage:
    • Exemplo: git status (devem aparecer listados os novos arquivos em vermelho)
  • Adicione o novo arquivo ao stage do Git:
    • Exemplo:
      • git add . (adicionando todas as mudanças - que estavam em vermelho - ao stage do Git)
      • git status (devem aparecer listados os arquivos em verde)
  • Faça o commit inicial:
    • Exemplo:
      • git commit -m 'iniciando o exercício. VAMOS COM TUDO :rocket:' (fazendo o primeiro commit)
      • git status (deve aparecer uma mensagem tipo nothing to commit )
  1. Adicione a sua branch com o novo commit ao repositório remoto
  • Usando o exemplo anterior: git push -u origin maria-soares-lessons-learned
  1. Crie um novo Pull Request (PR)
  • Vá até a página de Pull Requests do repositório no GitHub

    • Clique no botão verde "New pull request"
    • Clique na caixa de seleção "Compare" e escolha a sua branch com atenção
  • Coloque um título para o seu Pull Request

    • Exemplo: "Cria tela de busca"
  • Clique no botão verde "Create pull request"

  • Adicione uma descrição para o Pull Request, um título nítido que o identifique, e clique no botão verde "Create pull request"

Exemplo de pull request
⌨️ Durante o desenvolvimento

Faça commits das alterações que você fizer no código regularmente, pois assim você garante visibilidade para o time da Trybe e treina essa prática para o mercado de trabalho :) ;

  • Lembre-se de sempre após um (ou alguns) commits atualizar o repositório remoto;
  • Os comandos que você utilizará com mais frequência são:
    • git status (para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage);
    • git add (para adicionar arquivos ao stage do Git);
    • git commit (para criar um commit com os arquivos que estão no stage do Git);
    • git push -u origin nome-da-branch (para enviar o commit para o repositório remoto na primeira vez que fizer o push de uma nova branch);
    • git push (para enviar o commit para o repositório remoto após o passo anterior).
🎛 Checkstyle

Para garantir a qualidade do código, vamos utilizar neste exercício o Checkstyle. Assim o código estará alinhado com as boas práticas de desenvolvimento, sendo mais legível e de fácil manutenção! Para poder rodar o Checkstyle certifique-se de ter executado o comando mvn install dentro do repositório.

Para rodá-los localmente no repositório, execute os comandos abaixo:

mvn checkstyle:check

Se a análise do Checkstyle encontrar problemas no seu código, tais problemas serão mostrados no seu terminal. Se não houver problema no seu código, nada será impresso no seu terminal.

Você pode também instalar o plugin do Checkstyle na sua IDE. Para isso, volte na primeira seção do conteúdo.

⚠️ PULL REQUESTS COM ISSUES NO Checkstyle NÃO SERÃO AVALIADAS. ATENTE-SE PARA RESOLVÊ-LAS ANTES DE FINALIZAR O DESENVOLVIMENTO! ⚠️

🛠 Testes

Para executar todos os testes basta rodar o comando:

mvn test

Para executar apenas uma classe de testes:

mvn test -Dtest="TestClassName"

Requisitos

1 - Implementar um bean para WeatherClient

Criar um bean que implemente a interface `WeatherClient`

O projeto já disponibiliza uma interface WeatherClient, então você precisa:

  • Criar uma classe que implementa essa interface
    • Esta classe pode ter qualquer nome
  • Implementar o método getWeather, que:
    • Recebe o nome de uma cidade como parâmetro
    • Retorna uma String representando o clima nessa cidade.
      • Nota: neste momento você pode retornar uma String fixa que quiser (ex: "tempinho bom"). Ao final do projeto há uma sugestão caso depois você queira implementar uma consulta real ao clima da cidade.
  • Disponibilizar a classe implementada como um Bean
    • Você pode utilizar qualquer das técnicas que aprendeu, seja transformando a classe em um componente ou disponibilizando-a através de um método gerador de bean.

Você também pode criar classes e métodos extras, se julgar necessário.

Importante: implemente sua solução em um subpacote da aplicação principal, mas não utilize o pacote interfaces, pois ele é restaurado durante a execução do projeto pelo avaliador. Você pode criar um subpacote próprio se quiser, desde que esteja dentro da estrutura da aplicação principal.

2 - Implementar um bean para WeatherService

Criar um bean que implemente a interface `WeatherService`, fazendo

O projeto já disponibiliza uma interface WeatherService, então você precisa:

  • Criar uma classe que implementa essa interface
    • Esta classe pode ter qualquer nome
  • Sua classe deve utilizar injeção de dependências para receber o bean implementado para a WeatherClient.
    • Você pode utilizar qualquer uma das técnicas de injeção de dependência aprendidas, mas considere qual o caso de uso mais apropriado aqui.
  • Implementar o método getWeatherReport, que:
    • Recebe o nome de uma cidade como parâmetro
    • Retorna uma String no formato O clima é: XXXXXX, onde XXXXXX deve ser o retorno do método getWeather, chamado a partir do bean da WeatherClient que foi injetado acima.
  • Disponibilizar a classe implementada como um Bean.
    • Você pode utilizar qualquer das técnicas que aprendeu, seja transformando a classe em um componente ou disponibilizando-a através de um método gerador de bean.
      • Sugestão: utilize uma técnica diferente da que utilizou para o primeiro bean, pois isso vai te ajudar a praticar :)

Você também pode criar classes e métodos extras, se julgar necessário.

Importante: implemente sua solução em um subpacote da aplicação principal, mas não utilize o pacote interfaces, pois ele é restaurado durante a execução do projeto pelo avaliador. Você pode criar um subpacote próprio se quiser, desde que esteja dentro da estrutura da aplicação principal.

Vamos inovar?

Utilizar uma API de clima

Este não é um requisito do exercício, apenas uma proposta de implementação, caso você queira melhorar a aplicação e praticar mais.

A classe de implementação da WeatherClient está retornando um valor fixo para a previsão do tempo. Não seria mais interessante se retornássemos um valor real, através da consulta de uma API de clima?

Existem várias APIs de clima gratuitas, e você pode escolher a que preferir. Uma possibilidade é utilizar a Open-Meteo, que permite requisições sem a necessidade de criar uma chave.

A Open-Meteo possui duas rotas que podem ser úteis para você:

  • Geocoding: recebe o nome de uma cidade e retorna a latitude e longitude
  • Forecast: recebe a latitude e longitude, e retorna informações sobre o clima

Para fazer a consulta, você pode utilizar qualquer biblioteca Java que quiser. Mas sugerimos que você tente utilizar a Spring Web, para começar a explorar mais o universo Spring. Um bom lugar para começar é neste tutorial oficial do Spring.

🗣 Nos dê feedbacks sobre o exercício!

Ao finalizar e submeter o exercício, não se esqueça de avaliar sua experiência preenchendo o formulário. Leva menos de 3 minutos!