2
respostas

.

SerieRepository.java

package br.com.alura.screenmatch.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;

public interface SerieRepository extends JpaRepository<Serie, Long> {
    
    List<Serie> findByTotalTemporadasLessThanEqualAndAvaliacaoGreaterThanEqual(int temporadas, double avaliacao);
    
    List<Serie> findByTituloContainingIgnoreCase(String titulo);
    
    @Query("SELECT e FROM Episodio e WHERE e.titulo LIKE %:trecho%")
    List<Episodio> findEpisodiosByTrechoTitulo(String trecho);
    
    @Query("SELECT e FROM Episodio e WHERE e.serie = :serie ORDER BY e.avaliacao DESC LIMIT 5")
    List<Episodio> findTop5EpisodiosBySerie(Serie serie);
    
    @Query("SELECT e FROM Episodio e WHERE e.serie = :serie AND YEAR(e.dataLancamento) >= :ano")
    List<Episodio> findEpisodiosBySerieAndAno(Serie serie, int ano);
}
2 respostas

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();
    }
}

Oi, Eleazar! Como vai?

Dei uma olhada no seu código e ele está bem organizado e condizente com o que foi passado pelo instrutor, e isso mostra o seu comprometimento com o curso.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!