Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ciceroakiles/alura-imersao-java
https://github.com/ciceroakiles/alura-imersao-java
imersaojava java maven
Last synced: 5 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/ciceroakiles/alura-imersao-java
- Owner: ciceroakiles
- Created: 2022-07-16T02:06:36.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2022-11-19T16:46:21.000Z (about 2 years ago)
- Last Synced: 2024-12-04T18:23:43.967Z (2 months ago)
- Topics: imersaojava, java, maven
- Language: Java
- Homepage:
- Size: 29.3 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# alura-imersao-java
Objetivo geral: consumir APIs de imagens e gerar figurinhas customizadas com elas. Os códigos de exemplo nos docs podem ou não estar presentes na versão atual.
## Desafios da parte 1
Usar uma alternativa ao IMDb para pegar imagens de filmes
```
// String url1 = "https://api.mocki.io/v2/" + API_KEY + "/MostPopularMovies";
String url2 = "https://alura-filmes.herokuapp.com/conteudos";
```Solução adotada: trocar a URL da API de filmes e modificar o tratamento dos dados.
---
Editar a saída da nota
```
String os = System.getProperty("os.name");
if (os.contains("Windows")) return "*";
if (os.contains("Linux")) return "+";
return ""; // (ou seja, nada de estrelas para usuarios de Mac)
```Solução adotada: dependendo do sistema operacional, certos caracteres como emojis não são impressos corretamente; logo, foi feita uma classe que detecta o mesmo e altera o caractere utilizado para exibir a nota do filme com estrelas.
---
Extrair chave da API para um arquivo de properties
```
String API_KEY = PropertyManager.getApiKey("dev.properties");
```Solução adotada: após deixar a chave no arquivo de properties, incluir o mesmo no arquivo ```.gitignore```.
---
Importar uma biblioteca para fazer o parse do JSON
```
com.fasterxml.jackson.core
jackson-databind
{{version}}```
Solução adotada: usar o Maven no projeto e incluir a dependência acima no arquivo ```pom.xml```.
---
Receber uma avaliação do usuário
```
Scanner sc = new Scanner(System.in);
Double novaNota = Double.parseDouble(sc.next());
```Solução adotada: utilizar a classe Scanner para entrada de dados.
---
Imprimir um poster
Talvez, futuramente, retornar uma matriz gigante com uma "ASCII Art" ou um monte de caracteres em braille que lembram a própria imagem.
---
## Desafios da parte 2
Criar um diretório automaticamente para o arquivo de saída
```
File arquivo = new File("nomeArquivo");
if (!arquivo.exists()) {
arquivo.mkdirs(); // (cria a pasta)
}
```Solução adotada: criar uma classe (contendo o trecho acima) cuja única responsabilidade é lidar com arquivos.
---
Centralizar texto em relação à imagem
```
int textX = (int) (width - legWidth)/2;
```Solução adotada: deixar a posição horizontal da legenda como sendo primariamente relativa às larguras da imagem e da legenda.
---
Tratar a URL da imagem para obter uma maior
```
String urlImagemMaior = urlImagem.replace(
urlImagem.substring(
urlImagem.indexOf("._"), urlImagem.lastIndexOf(".")), ""
);
```Solução adotada: realizar o tratamento do endereço original (no caso acima, removendo uma ```substring```).
---
Personalizar texto da figurinha em relação à nota
```
private String textoLegenda(double nota) {
return (nota >= 9) ? "TOPZERA!" :
(nota >= 7.25) ? "MUITO BOM!" :
(nota >= 5.5) ? "MAIS OU MENOS!" :
(nota >= 2.75) ? "DORMI NO MEIO!" :
"NEM VI!";
}
```Solução adotada: escrever um método que retorna uma legenda, a qual varia de acordo com o valor da nota.
---
Consumir APIs de imagens com estruturas JSON diferentes
Solução adotada: usar cada um dos extratores em uma classe diferente, como proposto na parte 3.
---
## Desafios da parte 3
Mudar a classe Conteudo para "record"
Realizável apenas usando Java 14 ou posterior.
---
Utilizar uma exceção customizada
```
public class CustomMsgException extends Exception {public CustomMsgException(String msg, Throwable err) {
super(msg, err);
}
}
```Solução adotada: criar uma subclasse específica, responsável por lançar a exceção.
---
Utilizar um enum com URL e extrator de conteúdo
```
public enum UrlExtractorEnum {
API_IMDB("https://endereco1.etc.com/recurso/", new ExtractorIMDb()),
API_NASA("https://endereco2.etc.com/recurso/", new ExtractorNASA());[...]
}
```Solução adotada: dessa forma, é possível associar cada ```String``` com cada ```IExtractor```.
---
Usar alguma API de imagens completamente diferente
Solução adotada: fazer a própria API, como proposto nas partes 4 e 5.
---
Continua no segundo repositório:https://github.com/ciceroakiles/springboot-imagens-api-alura