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

[Sugerencia] Haga lo que hicimos: creando el menu de screenmatch, agregando informaciones y modelando la serie

package com.aluracursos.screenmatch.principal;

import com.aluracursos.screenmatch.model.DatosSerie;
import com.aluracursos.screenmatch.model.DatosTemporadas;
import com.aluracursos.screenmatch.model.Serie;
import com.aluracursos.screenmatch.service.ConsumoAPI;
import com.aluracursos.screenmatch.service.ConvierteDatos;

import java.util.*;
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=c236e1a";
    private ConvierteDatos conversor = new ConvierteDatos();
    private List<DatosSerie> datosSeries = new ArrayList<>();

    public void muestraElMenu() {
        var opcion = -1;
        while (opcion != 0) {
            var menu = """
                    1 - Buscar series 
                    2 - Buscar episodios
                    3 - Mostrar 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:
                    mostrarSeriesBuscadas();
                    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() {
        DatosSerie datosSerie = getDatosSerie();
        List<DatosTemporadas> temporadas = new ArrayList<>();

        for (int i = 1; i <= datosSerie.totalTemporadas(); i++) {
            var json = consumoApi.obtenerDatos(URL_BASE + datosSerie.titulo().replace(" ", "+") + "&season=" + i + API_KEY);
            DatosTemporadas datosTemporada = conversor.obtenerDatos(json, DatosTemporadas.class);
            temporadas.add(datosTemporada);
        }
        temporadas.forEach(System.out::println);
    }
    private void buscarSerieWeb() {
        DatosSerie datos = getDatosSerie();
        datosSeries.add(datos);
        System.out.println(datos);
    }

    private void mostrarSeriesBuscadas(){
//        datosSeries.forEach(System.out::println);
            List<Serie> series = new ArrayList<>();
            series = datosSeries.stream()
                    .map(d -> new Serie(d))
                    .collect(Collectors.toList());

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

}

1 respuesta

Hola Juan, espero que estés bien

¡Qué bueno que estás trabajando en el proyecto Screenmatch! Parece que ya tienes una buena estructura para tu aplicación. Según la actividad, necesitas evolucionar el proyecto modificando el menú, agregando campos a la clase DatosSerie y creando tu propia clase personalizada Serie.

Aquí tienes algunas sugerencias para avanzar:

  1. Modificar el menú: Si necesitas agregar más opciones al menú, simplemente añade más casos en el switch dentro del método muestraElMenu(). Por ejemplo, si quisieras agregar una opción para eliminar una serie buscada, podrías añadir:

    case 4:
        eliminarSerie();
        break;
    

    Y luego, implementas el método eliminarSerie().

  2. Agregar campos a DatosSerie: Supongamos que deseas agregar un campo para el "rating" de la serie. Deberías modificar la clase DatosSerie para incluir este nuevo campo:

    public class DatosSerie {
        private String titulo;
        private String genero;
        private double rating; // Nuevo campo
    
        // Constructor, getters y setters
    }
    

    Asegúrate de actualizar la lógica que convierte los datos JSON para incluir este nuevo campo.

  3. Crear la clase personalizada Serie: Ya que estás mapeando DatosSerie a Serie en el método mostrarSeriesBuscadas(), asegúrate de que la clase Serie refleje los campos que deseas personalizar. Por ejemplo:

    public class Serie {
        private String titulo;
        private String genero;
        private double rating;
    
        public Serie(DatosSerie datos) {
            this.titulo = datos.getTitulo();
            this.genero = datos.getGenero();
            this.rating = datos.getRating(); // Asegúrate de incluir todos los campos necesarios
        }
    
        // Getters y setters
    }
    

Espero que estas sugerencias te ayuden a avanzar en tu proyecto. ¡Sigue adelante y disfruta del proceso de aprendizaje!

Espero haber ayudado y buenos estudios!