@Entity
@Table(name = "episodios")
public class Episodio {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer temporada;
private String titulo;
private Integer numeroEpisodio;
private Double evaluacion;
private LocalDate fechaDeLanzamiento;
@ManyToOne
@JoinColumn(name = "serie_id")
private Serie serie;
public Episodio() {}
public Episodio(Integer numero, DatosEpisodio d) {
this.temporada = numero;
this.titulo = d.titulo();
this.numeroEpisodio = d.numeroEpisodio();
try {
this.evaluacion = Double.valueOf(d.evaluacion());
} catch (NumberFormatException e) {
this.evaluacion = 0.0;
}
try {
this.fechaDeLanzamiento = LocalDate.parse(d.fechaDeLanzamiento());
} catch (DateTimeParseException e) {
this.fechaDeLanzamiento = null;
}
}
public void setSerie(Serie serie) {
this.serie = serie;
}
}
@Entity
@Table(name = "series")
public class Serie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String titulo;
private String genero;
private Integer totalTemporadas;
private Double evaluacion;
@OneToMany(
mappedBy = "serie",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Episodio> episodios = new ArrayList<>();
public void addEpisodio(Episodio episodio) {
episodios.add(episodio);
episodio.setSerie(this);
}
public void removeEpisodio(Episodio episodio) {
episodios.remove(episodio);
episodio.setSerie(null);
}
}
private void buscarEpisodioPorSerie() {
listarSeriesBuscadas();
System.out.println("Escriba el nombre de la serie que desea ver");
var nombreSerie = teclado.nextLine();
Optional<Serie> serieOpt = series.stream()
.filter(s -> s.getTitulo().toLowerCase()
.contains(nombreSerie.toLowerCase()))
.findFirst();
if (serieOpt.isPresent()) {
var serieBuscada = serieOpt.get();
for (int i = 1; i <= serieBuscada.getTotalTemporadas(); i++) {
var json = consumoApi.obtenerDatos(
URL_BASE + serieBuscada.getTitulo().replace(" ", "+")
+ "&season=" + i + API_KEY
);
DatosTemporada datosTemporada =
conversor.obtenerDatos(json, DatosTemporada.class);
datosTemporada.episodios().forEach(d -> {
Episodio episodio = new Episodio(i, d);
serieBuscada.addEpisodio(episodio);
});
}
repository.save(serieBuscada);
System.out.println("Episodios guardados correctamente");
}
}