Principal.java
package br.com.alura.screenmatch.principal;
import java.util.List;
import java.util.Optional;
import java.util.Scanner;
public class Principal {
private final Scanner scanner;
private final SerieRepository repositorio;
public Principal(SerieRepository repositorio) {
this.scanner = new Scanner(System.in);
this.repositorio = repositorio;
}
public void exibirMenu() {
System.out.println("""
\n=== MENU ===
1 - Buscar séries por temporadas e avaliação
2 - Buscar episódios por trecho do nome
3 - Top 5 episódios de uma série
4 - Episódios de série lançados a partir de um ano
0 - Sair
""");
}
public void iniciar() {
int opcao;
do {
exibirMenu();
opcao = scanner.nextInt();
scanner.nextLine(); // Limpar buffer
switch (opcao) {
case 1 -> buscarSeriesPorTemporadasEAvaliacao();
case 2 -> buscarEpisodiosPorTrecho();
case 3 -> buscarTop5Episodios();
case 4 -> buscarEpisodiosPorAno();
case 0 -> System.out.println("Saindo...");
default -> System.out.println("Opção inválida!");
}
} while (opcao != 0);
}
private void buscarSeriesPorTemporadasEAvaliacao() {
System.out.print("\nNúmero máximo de temporadas: ");
int temporadas = scanner.nextInt();
System.out.print("Avaliação mínima: ");
double avaliacao = scanner.nextDouble();
scanner.nextLine();
List<Serie> series = repositorio
.findByTotalTemporadasLessThanEqualAndAvaliacaoGreaterThanEqual(temporadas, avaliacao);
System.out.println("\nResultados:");
series.forEach(s -> System.out.printf("%s (%d temporadas, %.1f★)\n",
s.getTitulo(), s.getTotalTemporadas(), s.getAvaliacao()));
}
private void buscarEpisodiosPorTrecho() {
System.out.print("\nDigite um trecho do nome do episódio: ");
String trecho = scanner.nextLine();
List<Episodio> episodios = repositorio.findEpisodiosByTrechoTitulo(trecho);
System.out.println("\nEpisódios encontrados:");
episodios.forEach(e -> System.out.printf("%s - %s (T%d)\n",
e.getSerie().getTitulo(), e.getTitulo(), e.getNumeroTemporada()));
}
private void buscarTop5Episodios() {
System.out.print("\nDigite o nome da série: ");
String nomeSerie = scanner.nextLine();
List<Serie> series = repositorio.findByTituloContainingIgnoreCase(nomeSerie);
if (series.isEmpty()) {
System.out.println("Série não encontrada!");
return;
}
Serie serie = series.get(0);
List<Episodio> topEpisodios = repositorio.findTop5EpisodiosBySerie(serie);
System.out.printf("\nTop 5 episódios de %s:\n", serie.getTitulo());
topEpisodios.forEach(e -> System.out.printf("%s - %.1f★ (T%d)\n",
e.getTitulo(), e.getAvaliacao(), e.getNumeroTemporada()));
}
private void buscarEpisodiosPorAno() {
System.out.print("\nDigite o nome da série: ");
String nomeSerie = scanner.nextLine();
System.out.print("Digite o ano mínimo: ");
int ano = scanner.nextInt();
scanner.nextLine();
List<Serie> series = repositorio.findByTituloContainingIgnoreCase(nomeSerie);
if (series.isEmpty()) {
System.out.println("Série não encontrada!");
return;
}
Serie serie = series.get(0);
List<Episodio> episodios = repositorio.findEpisodiosBySerieAndAno(serie, ano);
System.out.printf("\nEpisódios de %s lançados a partir de %d:\n", serie.getTitulo(), ano);
episodios.forEach(e -> System.out.printf("%s - %s (T%d)\n",
e.getTitulo(), e.getDataLancamento().getYear(), e.getNumeroTemporada()));
}
public static void main(String[] args) {
// Inicialize seu repositório (depende do seu framework)
// SerieRepository repositorio = ...;
Principal principal = new Principal(repositorio);
principal.iniciar();
}
}