diff --git a/src/main/java/io/github/matheusfy/screanmatch/service/ConsumoApi.java b/src/main/java/io/github/matheusfy/screanmatch/service/ConsumoApi.java index 2ccf133..ffe8197 100644 --- a/src/main/java/io/github/matheusfy/screanmatch/service/ConsumoApi.java +++ b/src/main/java/io/github/matheusfy/screanmatch/service/ConsumoApi.java @@ -50,26 +50,44 @@ public void obterDado(String apiUri){ String json = buildAndSendRequest(apiUri); String tipo = conversor.getType(json); + switch (tipo) { case "series" -> { SerieDTO serie = conversor.obterDados(json, SerieDTO.class); System.out.println("Informação serie: " + serie.toString()); if (!serie.totalTemporadas().equals("N/A")) { - List lstTemporadas = getTemporadas(apiUri, conversor.strToInt(serie.totalTemporadas())); - List episodios = getEpisodios(lstTemporadas); - - //---------------------------- Bloco busca episodio ---------------------------------------- Scanner scanner = new Scanner(System.in); - System.out.println("Deseja buscar um episodio especifico? S/N"); - if(scanner.nextLine().equals("s")){ - System.out.println("Digite o nome do episódio: "); - String episodioName = scanner.nextLine(); - - Optional episodio = buscaEpisodio(episodioName, episodios); - episodio.ifPresent(ep -> System.out.println(ep.toString())); + List lstTemporadas = getTemporadas(apiUri, conversor.strToInt(serie.totalTemporadas())); + List episodios = getEpisodios(lstTemporadas); + String texto = """ + Digite 1 para buscar por um episódio. + Digite 2 para calcular a média de avaliação das temporadas. + Digite 3 para mostrar os 5 melhores episódios da série. + """; + + System.out.println(texto); + + int opcao = scanner.nextInt(); + + switch (opcao){ + case 1 ->{ + scanner.nextLine(); // flush do buffer + System.out.println("Digite o nome do episódio: "); + String episodioName = scanner.nextLine(); + + Optional episodio = buscaEpisodio(episodioName, episodios); + + if (episodio.isPresent()){ + System.out.println(episodio.get().toString()); + } else { + System.out.println("Episódio não encontrado"); + } + } + case 2 -> mostrarMediaTemporadas(episodios); + case 3 -> getMelhores5Episodios(lstTemporadas).forEach(System.out::println); } - //-------------------------------------------------------------------------------------------------- + } } case "movie" -> { @@ -121,4 +139,12 @@ public Optional buscaEpisodio(String nomeEpisodio, List epis .findFirst(); } + public void mostrarMediaTemporadas(List episodios){ + + Map mediaTemp = episodios.stream() + .collect(Collectors.groupingBy(Episodio::getTemporada, Collectors.averagingDouble(Episodio::getAvaliacao))); + + mediaTemp.forEach((key, value) -> System.out.println("Temporada: " + key + " Avaliação: " + value)); + } + }