Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos


import com.aluracursos.screenmatch.model.DatosSerie;
import com.aluracursos.screenmatch.model.DatosTemporada;
import com.aluracursos.screenmatch.model.Serie;
import com.aluracursos.screenmatch.repository.SerieRepository;
import com.aluracursos.screenmatch.service.ConsumoAPI;
import com.aluracursos.screenmatch.service.ConvierteDatos;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class Principal {
    private Scanner teclado = new Scanner(System.in);
    private ConsumoAPI consumoApi = new ConsumoAPI();
    private final String URL_BASE = "https://www.omdbapi.com/?t=";
    private final String API_KEY = "&apikey=4fc7c187";
    private ConvierteDatos conversor = new ConvierteDatos();
    private List<DatosSerie> datosSeries = new ArrayList<>();

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

    public void muestraElMenu(){
        var opcion = -1;
        while (opcion != 0){
            var menu = """
              1 - Buscar series 
              2 - Buscar episodios
              3 - Listar series buscadas
              0 - Salir
              """;
            System.out.println(menu);

        opcion = teclado.nextInt();
        teclado.nextLine();

        switch (opcion) {
            case 1:
                buscarSerieWeb();
                break;
            case 2:
                buscarEpisodioPorSerie();
                break;
            case 3:
                listarSeriesBuscadas();
                break;
            case 0:
                System.out.println("Cerrando la aplicación...");
                break;
            default:
                System.out.println("Opción inválida");
        }
        }
    }

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

    }

    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);
        DatosSerie datos = conversor.obtenerDatos(json, DatosSerie.class);
        System.out.println(datos.sinopsis());
        return datos;
    }

    private void buscarEpisodioPorSerie(){
        DatosSerie datosSerie = getDatosSerie();
        List<DatosTemporada> temporadas = new ArrayList<>();

        for (int i = 1; i <= datosSerie.totalTemporadas(); i++) {
            var json = consumoApi.obtenerDatos(URL_BASE + datosSerie.titulo().replace(" ", "+") + "&season=" + i + API_KEY);
            DatosTemporada datosTemporada = conversor.obtenerDatos(json, DatosTemporada.class);
            temporadas.add(datosTemporada);
        }
        temporadas.forEach(System.out::println);
    }
    private void listarSeriesBuscadas() {
        List<Serie> series = repository.findAll();
        series.stream()
                .sorted(Comparator.comparing(Serie::getGenero))
                .forEach(System.out::println);

    }
}
1 respuesta

¡Hola Justin!

Parece que estás trabajando en una aplicación Java que interactúa con una API para buscar series y episodios, y luego almacena esta información en una base de datos utilizando Spring Data JPA. Vamos a revisar tu código para asegurarnos de que todo esté funcionando correctamente.

  1. Constructor de Principal: Veo que estás pasando un SerieRepository al constructor de Principal, lo cual es excelente ya que te permitirá inyectar el repositorio de Spring Data JPA cuando instancies Principal.

  2. Método buscarSerieWeb: Aquí estás obteniendo los datos de la serie desde la API y luego guardándolos en tu base de datos. Asegúrate de que el método repository.save(serie); esté funcionando correctamente y que Serie sea una entidad JPA bien configurada.

  3. Método buscarEpisodioPorSerie: Este método obtiene las temporadas de una serie. Asegúrate de que DatosTemporada esté correctamente mapeado y que el método obtenerDatos de ConsumoAPI esté devolviendo los datos esperados.

  4. Método listarSeriesBuscadas: Este método lista todas las series almacenadas en la base de datos. El uso de repository.findAll() es correcto para obtener todas las entidades Serie. La ordenación por género es un buen toque para mejorar la presentación.

  5. Errores comunes a verificar:

    • Asegúrate de que la conexión a la base de datos esté correctamente configurada en tu aplicación.
    • Verifica que las clases DatosSerie, DatosTemporada, y Serie estén correctamente definidas y que coincidan con la estructura JSON que estás recibiendo de la API.
    • Si encuentras algún problema al obtener datos de la API, revisa la URL que estás construyendo y asegúrate de que los parámetros sean correctos.

Espero que estas sugerencias te sean útiles para avanzar con tu proyecto.