Serie.java
package com.aluracursos.screenmatch.model;
import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "series")
public class Serie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String titulo;
@Enumerated(EnumType.STRING)
private Categoria genero;
private Integer totalTemporadas;
private Double evaluacion;
@OneToMany(mappedBy = "serie", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Episodio> episodios = new ArrayList<>();
public Serie() {}
public Serie(DatosSerie datos) {
this.titulo = datos.titulo();
this.genero = Categoria.fromString(datos.genero());
this.totalTemporadas = datos.totalTemporadas();
this.evaluacion = datos.evaluacion();
}
public void addEpisodio(Episodio episodio) {
episodios.add(episodio);
episodio.setSerie(this);
}
// getters
public String getTitulo() { return titulo; }
public Categoria getGenero() { return genero; }
public Integer getTotalTemporadas() { return totalTemporadas; }
public Double getEvaluacion() { return evaluacion; }
@Override
public String toString() {
return titulo + " | " + genero + " | " + evaluacion;
}
}
Episodio.java
package com.aluracursos.screenmatch.model;
import jakarta.persistence.*;
import java.time.LocalDate;
import java.time.format.DateTimeParseException;
@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 temporada, DatosEpisodio d) {
this.temporada = temporada;
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;
}
}
3️⃣ Categoria.java
package com.aluracursos.screenmatch.model;
public enum Categoria {
ACCION,
DRAMA,
COMEDIA,
ROMANCE,
CRIMEN;
public static Categoria fromEspanol(String texto) {
return Categoria.valueOf(texto.toUpperCase());
}
public static Categoria fromString(String texto) {
return Categoria.valueOf(texto.split(",")[0].toUpperCase());
}
}
4️⃣ SerieRepository.java
package com.aluracursos.screenmatch.repository;
import com.aluracursos.screenmatch.model.Categoria;
import com.aluracursos.screenmatch.model.Serie;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface SerieRepository extends JpaRepository<Serie, Long> {
Optional<Serie> findByTituloContainingIgnoreCase(String titulo);
List<Serie> findTop5ByOrderByEvaluacionDesc();
List<Serie> findByGenero(Categoria categoria);
List<Serie> findByTotalTemporadasLessThanEqualAndEvaluacionGreaterThanEqual(
int totalTemporadas,
double evaluacion
);
}