Skip to content

Commit

Permalink
Adicao de novas classes para uso na implementacao da API da Marvel
Browse files Browse the repository at this point in the history
  • Loading branch information
durvalprintes committed Jul 22, 2022
1 parent 7c38700 commit 3fad0fb
Show file tree
Hide file tree
Showing 10 changed files with 149 additions and 18 deletions.
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,12 @@ Exemplos da saída atual:

## 🔧 Desenvolvimento <a name = "desenvolvimento"></a>

Conteúdo a partir da Aula 02:
- [x] Limpeza da classe Main (com.alura.App) e reorganização do projeto.
- [x] Extração da imagem da uma URL (campo do objeto de retorno da API IMDB);
- [x] Manipulação de imagens;
- [x] Salvar imagens em disco;
- [x] Desafios;
Conteúdo a partir da Aula 03:
- [x] Reestruturação do projeto para consumir a Api da MARVEL.
- [x] Sobrescrita do método de saída no terminal com informacões da nova Api;
- [ ] Sobrescrita do método de geração de Stickers para imagens da nova Api;
- [ ] Uso de uma classe de exceção personalizado;
- [ ] Upgrade da JDK do projeto, para implementar casos de uso com classes <strong>Record</strong>;


## ⛏️ Ferramentas <a name = "ferramentas"></a>
Expand Down
16 changes: 12 additions & 4 deletions src/main/java/com/alura/App.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
package com.alura;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;

import com.alura.model.Endpoint;
import com.alura.service.StickerApi;
import com.alura.service.impl.ImdbApi;
import com.alura.service.impl.MarvelApi;

@SuppressWarnings("squid:S125")
public class App {

public static void main(String[] args) {
try {
StickerApi api = new ImdbApi(Endpoint.IMDB_MOST_POPULAR_TV, System.getProperty("key"));
api.shrinkList(20, 40);
api.generateStickerImage();
} catch (IOException e) {
StickerApi imdb = new ImdbApi(Endpoint.IMDB_MOST_POPULAR_TV,
System.getProperty("imdb_key"));
imdb.shrinkList(0, 1);
imdb.generateStickerImage();

StickerApi marvel = new MarvelApi(Endpoint.MARVEL_COMIC_CHARACTERS,
System.getProperty("marvel_public_key"),
System.getProperty("marvel_private_key"));
marvel.print();
} catch (IOException | NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/com/alura/model/Endpoint.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ public enum Endpoint {
IMDB_MOST_POPULAR_MOVIES("https://imdb-api.com/en/API/MostPopularMovies/"),
IMDB_TOP_250_TV("https://imdb-api.com/en/API/Top250TVs/"),
IMDB_MOST_POPULAR_TV("https://imdb-api.com/en/API/MostPopularTVs/"),
IMDB_POSTERS("https://imdb-api.com/en/API/Posters/");
IMDB_POSTERS("https://imdb-api.com/en/API/Posters/"),
MARVEL_COMIC_CHARACTERS("https://gateway.marvel.com:443/v1/public/characters");

private String url;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.alura.model;
package com.alura.model.imdb;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.alura.model;
package com.alura.model.imdb;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.alura.model;
package com.alura.model.imdb;

import lombok.Getter;

Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/alura/model/marvel/Character.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.alura.model.marvel;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class Character {
private Integer id;
private String name;
private String description;
private String thumbnailPath;
private String thumbnailExtension;
private String resourceURI;
}
16 changes: 16 additions & 0 deletions src/main/java/com/alura/model/marvel/PaginateCharacters.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.alura.model.marvel;

import java.util.List;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class PaginateCharacters {
private Integer offset;
private Integer limit;
private Integer total;
private Integer count;
private List<Character> characters;
}
8 changes: 4 additions & 4 deletions src/main/java/com/alura/service/impl/ImdbApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import java.util.stream.Collectors;

import com.alura.model.Endpoint;
import com.alura.model.Movie;
import com.alura.model.Poster;
import com.alura.model.Rating;
import com.alura.model.Sticker;
import com.alura.model.imdb.Movie;
import com.alura.model.imdb.Poster;
import com.alura.model.imdb.Rating;
import com.alura.service.StickerApi;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down Expand Up @@ -86,7 +86,7 @@ public void generateStickerImage() {
ratingText.put(6, "PASSATEMPO");
ratingText.put(8, "TOP");

System.out.println("Iniciando geração...");
System.out.println("Iniciando geração de Stickers do IMDB...");
this.movies.stream().forEach(
movie -> {
try {
Expand Down
91 changes: 91 additions & 0 deletions src/main/java/com/alura/service/impl/MarvelApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package com.alura.service.impl;

import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

import com.alura.model.Endpoint;
import com.alura.model.marvel.Character;
import com.alura.model.marvel.PaginateCharacters;
import com.alura.service.StickerApi;
import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.Getter;

@Getter
@SuppressWarnings("squid:S106")
public class MarvelApi implements StickerApi {

private static final UUID ID_REQUEST = UUID.randomUUID();
private String publicKey;
private String privateKey;
private PaginateCharacters characters;

public MarvelApi(Endpoint endpoint, String publicKey, String privateKey)
throws IOException, InterruptedException, NoSuchAlgorithmException {
this.publicKey = publicKey;
this.privateKey = privateKey;
this.characters = getResponseData(endpoint.getUrl());
}

private PaginateCharacters getResponseData(String url)
throws IOException, InterruptedException, NoSuchAlgorithmException {
var json = this.jsonFromGet(String.format("%s?ts=%s&apikey=%s&hash=%s", url, ID_REQUEST, publicKey,
new BigInteger(1, MessageDigest.getInstance("MD5").digest((ID_REQUEST + privateKey + publicKey).getBytes()))
.toString(16)));
var jsonNode = new ObjectMapper().readTree(json).get("data");
return PaginateCharacters.builder()
.offset(jsonNode.get("offset").asInt())
.limit(jsonNode.get("limit").asInt())
.total(jsonNode.get("total").asInt())
.count(jsonNode.get("count").asInt())
.characters(
StreamSupport.stream(jsonNode.get("results").spliterator(), false)
.map(node -> Character.builder()
.id(node.get("id").asInt())
.name(node.get("name").asText())
.description(node.get("description").asText())
.thumbnailPath(node.get("thumbnail").get("path").asText())
.thumbnailExtension(node.get("thumbnail").get("extension").asText())
.resourceURI(node.get("resourceURI").asText())
.build())
.collect(Collectors.toList()))
.build();
}

@Override
public void shrinkList(int min, int max) {
// TODO Auto-generated method stub

}

@Override
public void print() {
printField("\033[41m", "Marvel Characters");
this.characters.getCharacters().stream()
.forEach(character -> {
printField("\033[1;37m", "Name: " + character.getName());
printField("\033[1;37m",
"Thumbnail: " + character.getThumbnailPath() + "." + character.getThumbnailExtension());
});

}

@Override
public void updateListWithInput(InputStream input) throws IOException {
// TODO Auto-generated method stub

}

@Override
public void generateStickerImage() {
// TODO Auto-generated method stub

}

}

0 comments on commit 3fad0fb

Please sign in to comment.