Skip to content

Commit 466cc4a

Browse files
resolvendo desafio do dia 3
1 parent 676c384 commit 466cc4a

File tree

5 files changed

+125
-123
lines changed

5 files changed

+125
-123
lines changed

anotacoes/dia3.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Nesse desafio pude finalmente criar a classe "Filme" e remover as listas individuais com os valores extraídos da API. Também decidi melhorar um pouco o meu código e estou mais satisfeito com ele agora.
2+
3+
Tive a oportunidade de aprender um pouco sobre Records, apesar de não ter usado, e quebrei a cabeça mudando as minhas expressões regulares.
4+
5+
Reflexões feitas no desafio:
6+
7+
Algumas reflexões: você acha que faz sentido ter setters ou um construtor padrão? Um filme deve ser interfaceado? Deve ser imutável? Justifique a sua decisão no seu repositório.
8+
9+
Respostas:
10+
11+
1. Não vi sentido em colocar setters na classe "Filmes", pois os filmes não são algo em que a gente vai ficar mexendo, os filmes têm as informações deles e é isso. Único caso em que faria sentido uma mudança seria se o filme tivesse sido registrado com informações erradas.
12+
2. Não acho que um filme deve ser interfaceado, pois ele não precisa ter comportamentos específicos além dos getters e nem precisa ter uma ordem natural nesse caso, pois os filmes já são adicionados à lista por rank.
13+
3. O filme deve ser imutável, pois tanto título quanto imagem, ano e rank não vão mudar (não no meu projeto, pelo menos, se a ordem dos rankings mudarem ou algo do tipo, é dever da API atualizar).

filmes/src/main/java/io/github/raphaelrighetti/filmes/LeitorApi.java renamed to filmes/src/main/java/io/github/raphaelrighetti/filmes/TestaTudo.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package io.github.raphaelrighetti.filmes;
22

3-
import io.github.raphaelrighetti.filmes.regex.JsonMatcher;
3+
import io.github.raphaelrighetti.filmes.modelos.Catalogo;
44

55
import java.io.*;
66
import java.net.URI;
77
import java.net.http.HttpClient;
88
import java.net.http.HttpRequest;
99
import java.net.http.HttpResponse;
10-
import java.util.List;
1110
import java.util.Properties;
1211

13-
public class LeitorApi {
12+
public class TestaTudo {
1413

1514
public static void main(String[] args) {
1615
Properties properties = new Properties();
@@ -28,14 +27,9 @@ public static void main(String[] args) {
2827
HttpClient client = HttpClient.newBuilder().build();
2928
try {
3029
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
31-
System.out.println(response.body());
32-
JsonMatcher jsonMatcher = new JsonMatcher(response.body());
33-
jsonMatcher.getFilmes().forEach(System.out::println);
34-
List<String> ranks = jsonMatcher.getRanks();
35-
for (int i = 0; i < ranks.size(); i++) {
36-
System.out.println(ranks.get(i) + ", " + i);
37-
38-
}
30+
Catalogo catalogo = new Catalogo(response.body());
31+
catalogo.getFilmes().forEach(System.out::println);
32+
System.out.println(catalogo.getFilmes().size());
3933
} catch (Exception e) {
4034
e.printStackTrace();
4135
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package io.github.raphaelrighetti.filmes.modelos;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.regex.Matcher;
7+
import java.util.regex.Pattern;
8+
9+
public class Catalogo {
10+
11+
private List<Filme> filmes = new ArrayList<>(250);
12+
13+
public Catalogo(String json) {
14+
checaStringNull(json);
15+
json = formataJson(json);
16+
preencheFilmes(json);
17+
}
18+
19+
public List<Filme> getFilmes() {
20+
checaListaVazia(filmes);
21+
return Collections.unmodifiableList(filmes);
22+
}
23+
24+
private void preencheFilmes(String json) {
25+
Matcher m = Pattern.compile("\\{[^{}]*}").matcher(json);
26+
while (m.find()) {
27+
String[] information = m.group().split(",\"");
28+
String nome = getValorIsolado(information[2]);
29+
String imagem = getValorIsolado(information[5]);
30+
String ano = getValorIsolado(information[4]);
31+
String rank = getValorIsolado(information[1]);
32+
33+
filmes.add(new Filme(nome, imagem, ano, rank));
34+
}
35+
}
36+
37+
private void checaStringNull(String json) {
38+
if (json == null) {
39+
throw new NullPointerException("É necessário passar os dados!");
40+
}
41+
}
42+
43+
private void checaListaVazia(List<Filme> lista) {
44+
if (lista.isEmpty()) {
45+
throw new NullPointerException("A lista está vazia!");
46+
}
47+
}
48+
49+
private String formataJson(String json) {
50+
Matcher mStart = Pattern.compile("^\\{\"items\":(\\[(.*)]),\"errorMessage\":\"\"}$").matcher(json);
51+
if (mStart.find()) {
52+
return mStart.group(2);
53+
}
54+
return json;
55+
}
56+
57+
private String getValorIsolado(String s) {
58+
Matcher m1 = Pattern.compile(":\"([^\"]*)\"").matcher(s);
59+
60+
if (m1.find()) {
61+
return m1.group(1);
62+
}
63+
return s;
64+
}
65+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.github.raphaelrighetti.filmes.modelos;
2+
3+
import java.time.Year;
4+
5+
public class Filme {
6+
7+
private final String nome;
8+
private final String urlImage;
9+
private final Year year;
10+
private final int rank;
11+
12+
public Filme(String nome, String urlImage, String year, String rank) {
13+
this.nome = nome;
14+
this.urlImage = urlImage;
15+
this.year = Year.parse(year);
16+
this.rank = Integer.parseInt(rank);
17+
}
18+
19+
public String getNome() {
20+
return nome;
21+
}
22+
23+
public String getUrlImage() {
24+
return urlImage;
25+
}
26+
27+
public Year getYear() {
28+
return year;
29+
}
30+
31+
public int getRank() {
32+
return rank;
33+
}
34+
35+
@Override
36+
public String toString() {
37+
return "[Nome: " + nome +
38+
", Imagem URL: " + urlImage +
39+
", Ano: " + year +
40+
", Rank: " + rank + "]";
41+
}
42+
}

filmes/src/main/java/io/github/raphaelrighetti/filmes/regex/JsonMatcher.java

Lines changed: 0 additions & 112 deletions
This file was deleted.

0 commit comments

Comments
 (0)