Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ciceroakiles/alura-imersao-java


https://github.com/ciceroakiles/alura-imersao-java

imersaojava java maven

Last synced: 5 days ago
JSON representation

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