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