@Entity
@Table(name = "series")
public class Serie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String titulo;
private Integer numeroDeTemporadas;
private Double evaluacion;
@Enumerated(EnumType.STRING)
private Categoria genero;
private String poster;
private String sinopsis;
private String actores;
@OneToMany(mappedBy = "serie", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Episodio> episodios;
public Serie(){
}
public Serie(DatosSerie datosSerie) {
this.titulo = datosSerie.titulo();
this.numeroDeTemporadas = datosSerie.numeroDeTemporadas();
this.evaluacion = OptionalDouble.of(Double.parseDouble(datosSerie.evaluacion())).orElse(0.0);
this.genero = Categoria.fromString(datosSerie.genero().split(",")[0].trim());
this.poster = datosSerie.poster();
this.sinopsis = datosSerie.sinopsis();
this.actores = datosSerie.actores();
}
public void setActores(String actores) {
this.actores = actores;
}
public List<Episodio> getEpisodios() {
return episodios;
}
public void setEpisodios(List<Episodio> episodios) {
episodios.forEach(e -> e.setSerie(this));
this.episodios = episodios;
}
@Override
public String toString() {
return "titulo='" + titulo + '\'' +
", numeroDeTemporadas=" + numeroDeTemporadas +
", evaluacion=" + evaluacion +
", genero='" + genero + '\'' +
", poster='" + poster + '\'' +
", sinopsis='" + sinopsis + '\'' +
", actores='" + actores + '\'' +
", episodios='" + episodios + '\'';
}
}
@Entity
@Table(name ="episodios")
public class Episodio {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer numeroTemporada;
private String titulo;
private Integer numeroEpisodio;
private Double evaluacion;
private LocalDate fechaDeLanzamiento;
@ManyToOne
private Serie serie;
public Episodio(){
}
public Episodio(Integer numeroTemporada, DatosEpisodio datosEpisodio) {
this.numeroTemporada = numeroTemporada;
this.titulo = datosEpisodio.titulo();
this.numeroEpisodio = datosEpisodio.numero();
try {
this.evaluacion = Double.valueOf(datosEpisodio.evaluacion());
} catch (NumberFormatException e) {
this.evaluacion = 0.0;
}
try {
this.fechaDeLanzamiento = LocalDate.parse(datosEpisodio.fechaDeLanzamiento());
} catch (DateTimeParseException e) {
this.fechaDeLanzamiento = null;
}
}
public Serie getSerie() {
return serie;
}
public void setSerie(Serie serie) {
this.serie = serie;
}
@Override
public String toString() {
return "numeroTemporada=" + numeroTemporada +
", titulo='" + titulo + '\'' +
", numeroEpisodio=" + numeroEpisodio +
", evaluacion=" + evaluacion +
", fechaDeLanzamiento=" + fechaDeLanzamiento;
}
}