package com.aluracursos.Screenmatch1.repository;
import com.aluracursos.Screenmatch1.model.episodios.Episodio; import com.aluracursos.Screenmatch1.model.series.Categoria; import com.aluracursos.Screenmatch1.model.series.Serie; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.Optional;
public interface SerieRepository extends JpaRepository<Serie,Long> { //se crea esto para buscar personalisadas en nuestro archivo guardado Optional findByTituloContainsIgnoreCase(String nombreSerie); //se crea lista mejoes 5 en nuestro archivo Desc(); de mayor a menor ListfindTop5ByOrderByEvaluacionDesc(); //se crea lista de busqueda por categoria ListfindByGenero(Categoria categoria); // se crea para buscar por minomo y evaluacion // List findByTotalDeTemporadasLessThanEqualAndEvaluacionGreaterThanEqual(Integer totalDeTemporadas, Double evaluacion); // sinplificamos el paso anterior buscando con querry nativa // @Query(value = "SELECT * FROM series WHERE series.total_de_temporadas <= 2 AND series.evaluacion >= 7", nativeQuery = true) // trabajando con clases de java y query // @Query("SELECT * FROM series WHERE series.total_de_temporadas <= 2 AND series.evaluacion >= 7") //se cambia asterico * por s que es la entidad OSEA SERIE con la que estoy trabajando - series se cambia por la clase Series //tambien se da un alias SELECT s FROM Serie s-se cambia SELECT s FROM Serie s //tambien se cambia WHERE s.total_de_temporadas por totalDeTemporadas como esta private Integer totalDeTemporadas; //tambien se cambia <= 2 por totalDeTemporadas para que no quede fijo lo mismo con evaluación // se agrega : para diferenciar el valor de la clase ya por el ingreso del ciclo que se busca @Query("SELECT s FROM Serie s WHERE s.totalDeTemporadas <= :totalDeTemporadas AND s.evaluacion >= :evaluacion") List seriesPorTemporadayEvaluacion(Integer totalDeTemporadas, Double evaluacion);
//se ejecuto jpql anterrior // relacion entre tabla y otra tabla SELECT e FROM Serie s JOIN s.episodios // no diferencia en tremayusculas ni minusculas mejor con ILIKE %:nombreEpisodio%Con LIKE, puedes buscar por patrones. // Por ejemplo, %aventura% encontraría todos los libros que tienen la palabra "aventura" en cualquier parte del título, // incluso si está escrita con mayúsculas o minúsculas. // ojo a s.episodios e @Query("SELECT e FROM Serie s JOIN s.episodios e WHERE e.titulo ILIKE %:nombreEpisodio%") ListepisodiosPorNombre(String nombreEpisodio);
// top 5 mejores episodios
//SELECT e FROM Serie s JOIN s.episodios e en donde buscar desde where @Query("SELECT e FROM Serie s JOIN s.episodios e WHERE s = :serie ORDER BY e.evaluacion DESC LIMIT 5") Listtop5MejoresEpisodios(Serie serie); }