- 📄 Pré-Requisitos
- 💻 FASE 1 - Criando a aplicação
- 🤖 FASE 2 - Melhorando a qualidade com testes automatizados
- 🚀 FASE 3 - Implementando APIS com Spring Framework
- 🌐 FASE 4 - Consumindo APIS Rest
- ⚙️FASE 5 - Banco de Dados
- 🌐 FASE 6 - Documentação de API com Swagger
Objetivo: Criar uma aplicação que baseada em um produto e no endereço do cliente, seja calculado o valor do frete e impresso no console.
Obs: Para esse desafio, foi utilizado como base a apostila Java e Orientação a Objetos da Caelum
Aprendizado: A idéia aqui é desenvolver conceitos basicos da linguagem Java e da orientação a objetos.
Exemplo do que deve ser impresso no Console :
Produto: Geladeira
UF: SP
Valor do Frete: 15,00
- O cliente deverá conter as seguintes informações:
- nome;
- data de aniversario;
- A data de aniversario do cliente deverá utilizar a nova api de datas do Java 8;
- cep;
- O cep deve estar dentro das seguintes regras:
- O cep deve aceitar zeros a esquerda. Exemplo: 02123040;
- O cep deve conter exatamente 8 dígitos numéricos;
- Não pode ter letras ou caracteres especiais;
- Caso o Cep seja invalido, você deve lançar a exceção IllegalArgumentException do Java, trata-la e exibir a seguinte mensagem no console: "Cep invalido ! o formato correto deveria ser XXXXXXXX"
- Se o usuário mandar um cep com mascara (hifen) exemplo: 021023-040, você deve remover esse hifen exemplo: 02123040;
- Dicas:
- Estude sobre o pacote java.lang.String;
- O cep deve estar dentro das seguintes regras:
- logradouro;
- bairro;
- cidade;
- uf;
- A uf deve ser um estado do Brasil valido. Exemplo: SP, MG, RJ e etc ...
- Dicas:
- Você pode utilizar uma enum para representar a uf ao invés de String;
- O produto deverá conter as seguintes informações:
- descrição;
- valor;
- Utilize Double como tipo;
- O valor do produto não pode ser nulo ou zero, caso seja, a exceção PrecoInvalidoException deverá ser lançada e tratada e a unica mensagem que deverá ser exibida no console é: "O valor do produto [Aqui vc coloca o nome do produto] está inválido pois deve ser maior que zero !" ;
- O frete deverá conter as seguintes informações:
- produto;
- uf;
- valor;
- Deve existir 2 tipos de calculo de frete, um baseado na uf do cliente e outro baseado no valor do produto.
- Ambos irão receber como parâmetro o produto e o cliente e devem retornar o Frete.
A regra para o calculo de frete por uf deverá ser a seguinte: Se a uf do cliente for SP, MG ou RJ, o valor do frete deverá ser 30% do valor do produto, caso contrário o valor do frete será 15% do valor do produto;
A regra para o calculo de frete por valor do produto deverá ser a seguinte: Se o preco do produto for menor que 20,00 o valor do frete será de 2,00. Se o valor do produto for entre 20,00 e 100,00 o Frete deverá ser 8,00 e acima de R$ 100,00 o frete é gratis (0,00);
- Uso correto de variaveis;
- Uso correto de modificadores de acesso;
- Uso correto de metodos de instância e estáticos;
- Encapsulamento das classes;
- Coesão e acoplamento;
- Uso da orientação a objeto (Classe, Método, Herança, Polimorfismo, Encapsulamento e etc...);
- Se todas as regras e funcionalidades descritas nesse arquivo estão de acordo;
- Qualidade do código de uma maneira geral;
Material de Apoio
Objetivo: Precisamos testar a nossa aplicação e para isso, a ideia é utilizar o conceito de testes automatizados !
Aprendizado: A idéia aqui é treinar conceitos relacionados a testes e a qualidade do software de uma maneira geral.
Implementes testes automatizados para os tipos de calculo e para as validações.
Recomendações:
- Como Framework de teste, utilize o Junit 5.
- Para mockar os objetos, utilize o framework Mockito.
- Nos testes unitários, não subir o contexto do Spring (SpringBootTest);
Material de Apoio:
- Qualidade dos testes;
- Cobertura de testes;
Objetivo: A ideia agora é implementar apis para nossa aplicação utilizando Spring Framework e não mais utilizar a impressão pelo console.
Aprendizado: A idéia aqui é consolidar os conceitos de Web e Apis Rest por meio do Spring Framework.
Material de apoio:
Precisamos construir uma Api que nos forneça as seguintes funcionalidades:
Produto:
- Obter o produto por Id;
- Cadastrar um produto;
- Deletar um produto;
- Buscar todos os produtos cadastrados;
Cliente:
- Obter o cliente por Id;
- Cadastrar um cliente;
- Deletar um cliente;
- Buscar todos os clientes cadastrados;
Calculo de Frete:
- Calcular o frete informando como parametros o tipo de calculo a ser executado, o id do produto e o id do cliente;
- Boas práticas de API;
- Testes das Apis;
Objetivo: Agora vamos alterar o cadastro do nosso cliente para que seja necessario enviar apenas o cep e o restante dos dados sejam obtidos através de uma api de terceiros (uf, logradouro, bairro cidade e etc...).
Aprendizado: A idéia é aprender a consumir uma api rest de terceiros.
Obs:
- Crie um modulo maven separado cada se comunicar com a api;
- Utilizar o novo HttpClient do Java 11;
- Documentação da api de ceps;
- Qualidade do código;
- Boas práticas no consumos de Apis (Configuração de timeout e etc ..);
Objetivo: Agora vamos trabalhar com banco de dados na nossa aplicação. Para isso, vamos fazer uso de 2 tipos de banco, um relacional (H2) e outro não relacional (MongoDb).
Aprendizado: A idéia é consolidar os conceitos de base de dados relacionais e não relacionais (NoSql).
Obs: Crie um modulo maven separado cada banco.
- Conexão com banco de dados;
- Utilização de banco de dados com a API;
Objetivo: Nessa fase vamos utilizar o Swagger para documentar os recursos dessa API.
Aprendizado: O Swagger é uma ferramenta open source que auxilia desenvolvedores nos processos de definir, criar, documentar e consumir APIs REST. Essa ferramenta auxilia descrevendo os recursos que uma API deve possuir, como endpoints, dados recebidos, dados retornados, códigos HTTP e métodos de autenticação, entre outros.
Obs:
- Documentação da API via Swagger