Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

Haga lo que hicimos: utilizando JPQL para realizar consultas

private List datosSeries = new ArrayList<>();
private SerieRepository repositorio;
private List series;
private Optional serieBuscada;

public Principal(SerieRepository repository) {
    this.repositorio = repository;
}

public void muestraElMenu() {
    var opcion = -1;
    while (opcion != 0) {
        var menu = """
                1 - Buscar series 
                2 - Buscar episodios
                3 - Mostrar series buscadas
                4 - Buscar series por titulo
                5 - Top 5 mejores series
                6 - Buscar Series por categoría
                7 - filtrar series por temporadas y evaluación
                8 - Buscar episodios por titulo
                9 - Top 5 episodios por Serie
                              
                0 - Salir
                """;
        System.out.println(menu);
        opcion = teclado.nextInt();
        teclado.nextLine();

        switch (opcion) {
            case 1:
                buscarSerieWeb();
                break;
            case 2:
                buscarEpisodioPorSerie();
                break;
            case 3:
                mostrarSeriesBuscadas();
                break;
            case 4:
                buscarSeriesPorTitulo();
                break;
            case 5:
                buscarTop5Series();
                break;
            case 6:
                buscarSeriesPorCategoria();
                break;
            case 7:
                filtrarSeriesPorTemporadaYEvaluacion();
                break;
            case 8:
                buscarEpisodiosPorTitulo();
                break;
            case 9:
                buscarTop5Episodios();
                break;
            case 0:
                System.out.println("Cerrando la aplicación...");
                break;
            default:
                System.out.println("Opción inválida");
        }
    }

}

private DatosSerie getDatosSerie() {
    System.out.println("Escribe el nombre de la serie que deseas buscar");
    var nombreSerie = teclado.nextLine();
    var json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + API_KEY);
    System.out.println(json);
    DatosSerie datos = conversor.obtenerDatos(json, DatosSerie.class);
    return datos;
}
private void buscarEpisodioPorSerie() {
    mostrarSeriesBuscadas();
    System.out.println("Escribe el nombre de la serie de la cual quieres ver los episodios");
    var nombreSerie = teclado.nextLine();

    Optional<Serie> serie = series.stream()
            .filter(s -> s.getTitulo().toLowerCase().contains(nombreSerie.toLowerCase()))
            .findFirst();

    if(serie.isPresent()){
        var serieEncontrada = serie.get();
        List<DatosTemporadas> temporadas = new ArrayList<>();

        for (int i = 1; i <= serieEncontrada.getTotalTemporadas(); i++) {
            var json = consumoApi.obtenerDatos(URL_BASE + serieEncontrada.getTitulo().replace(" ", "+") + "&season=" + i + API_KEY);
            DatosTemporadas datosTemporada = conversor.obtenerDatos(json, DatosTemporadas.class);
            temporadas.add(datosTemporada);
        }
        temporadas.forEach(System.out::println);

        List<Episodio> episodios = temporadas.stream()
                .flatMap(d -> d.episodios().stream()
                        .map(e -> new Episodio(d.numero(), e)))
                .collect(Collectors.toList());

        serieEncontrada.setEpisodios(episodios);
        repositorio.save(serieEncontrada);
    }

}
private void buscarSerieWeb() {
    DatosSerie datos = getDatosSerie();
    Serie serie = new Serie(datos);
    repositorio.save(serie);
    //datosSeries.add(datos);
    System.out.println(datos);
}

private void mostrarSeriesBuscadas() {
    series = repositorio.findAll();

    series.stream()
            .sorted(Comparator.comparing(Serie::getGenero))
            .forEach(System.out::println);
}

private void buscarTop5Episodios(){
buscarSeriesPorTitulo();
if(serieBuscada.isPresent()){
Serie serie = serieBuscada.get();
List topEpisodios = repositorio.top5Episodios(serie);
topEpisodios.forEach(e ->
System.out.printf("Serie: %s - Temporada %s - Episodio %s - Evaluación %s\n",
e.getSerie().getTitulo(), e.getTemporada(), e.getTitulo(), e.getEvaluacion()));

    }
}

}