Commit 945fe127 by Rubén Ramírez

fix: [Repositorio]: Corregidos los repositorios debido a la incorrecta división por capas

parent fe6625d5
......@@ -3,15 +3,13 @@ package com.ujaen.tfg.mangaffinity.repositorios;
import com.ujaen.tfg.mangaffinity.entidades.Capitulo;
import com.ujaen.tfg.mangaffinity.entidades.FuenteCapitulo;
import com.ujaen.tfg.mangaffinity.entidades.TipoRecurso;
import com.ujaen.tfg.mangaffinity.servicios.ServicioRecursos;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Optional;
@Repository
@Transactional
......@@ -33,75 +31,26 @@ public class RepositorioCapitulo {
.getResultList();
}
public void actualizarCapitulo(Capitulo capituloModificado) {
Capitulo capitulo = em.find(Capitulo.class, capituloModificado.getId());
if (capitulo != null) {
capitulo.setNumero(capituloModificado.getNumero());
capitulo.setTitulo(capituloModificado.getTitulo());
capitulo.setTipo(capituloModificado.getTipo());
capitulo.setActivo(capituloModificado.getActivo());
List<FuenteCapitulo> fuentesActuales = new ArrayList<>(capitulo.getFuentes());
for (FuenteCapitulo fuenteExistente : fuentesActuales) {
boolean sigueExistiendo = capituloModificado.getFuentes().stream()
.anyMatch(f -> f.getNombreFuente().equals(fuenteExistente.getNombreFuente()));
if (!sigueExistiendo) {
capitulo.getFuentes().remove(fuenteExistente);
em.remove(em.contains(fuenteExistente) ? fuenteExistente : em.merge(fuenteExistente));
}
}
for (FuenteCapitulo nuevaFuente : capituloModificado.getFuentes()) {
boolean existe = fuentesActuales.stream()
.anyMatch(f -> f.getNombreFuente().equals(nuevaFuente.getNombreFuente()));
if (!existe) {
nuevaFuente.setCapitulo(capitulo);
em.persist(nuevaFuente);
capitulo.getFuentes().add(nuevaFuente);
}
}
em.merge(capitulo);
em.flush();
}
@Transactional
public void actualizarCapitulo(Capitulo capitulo) {
em.merge(capitulo);
}
public void eliminarFuente(FuenteCapitulo fuente) {
FuenteCapitulo fuenteEncontrada = em.find(FuenteCapitulo.class, fuente.getId());
if (fuenteEncontrada != null) {
em.remove(fuenteEncontrada);
}
em.remove(em.contains(fuente) ? fuente : em.merge(fuente));
}
@Transactional
public void borrarCapitulo(Capitulo capitulo) {
capitulo = em.merge(capitulo);
List<FuenteCapitulo> fuentes = em.createQuery(
"SELECT f FROM FuenteCapitulo f WHERE f.capitulo = :capitulo", FuenteCapitulo.class)
.setParameter("capitulo", capitulo)
.getResultList();
for (FuenteCapitulo fuente : fuentes) {
em.remove(fuente);
}
em.flush();
em.remove(capitulo);
em.remove(em.contains(capitulo) ? capitulo : em.merge(capitulo));
}
public void actualizarFuente(FuenteCapitulo fuente) {
FuenteCapitulo existente = em.find(FuenteCapitulo.class, fuente.getId());
if (existente != null) {
existente.setUrlFuente(fuente.getUrlFuente());
em.merge(existente);
}
em.flush();
em.merge(fuente);
}
public void agregarFuente(FuenteCapitulo fuente) {
em.persist(fuente);
em.flush();
}
@Transactional(readOnly = true)
......@@ -115,13 +64,13 @@ public class RepositorioCapitulo {
}
@Transactional(readOnly = true)
public Capitulo buscarPorId(Long id) {
return em.find(Capitulo.class, id);
public Optional<Capitulo> buscarPorId(Long id) {
return Optional.ofNullable(em.find(Capitulo.class, id));
}
@Transactional(readOnly = true)
public FuenteCapitulo buscarFuentePorId(Long id) {
return em.find(FuenteCapitulo.class, id);
public Optional<FuenteCapitulo> buscarFuentePorId(Long id) {
return Optional.ofNullable(em.find(FuenteCapitulo.class, id));
}
@Transactional
......@@ -131,4 +80,5 @@ public class RepositorioCapitulo {
em.remove(fuente);
}
}
}
......@@ -8,6 +8,7 @@ import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
@Repository
@Transactional
......@@ -20,57 +21,57 @@ public class RepositorioRecurso {
}
@Transactional(readOnly = true)
public Recurso buscarPorId(Long id) {
return em.find(Recurso.class, id);
public Optional<Recurso> buscarPorId(Long id) {
return Optional.ofNullable(em.find(Recurso.class, id));
}
@Transactional(readOnly = true)
public List<Recurso> buscarPorTitulo(String titulo) {
public List<Recurso> buscarPorTitulo(String titulo, int maxResults) {
return em.createQuery(
"SELECT r FROM Recurso r WHERE LOWER(r.titulo) LIKE LOWER(:titulo)",
"SELECT r FROM Recurso r WHERE LOWER(r.titulo) LIKE LOWER(:titulo)",
Recurso.class)
.setParameter("titulo", "%" + titulo + "%")
.setMaxResults(maxResults) // Limita la cantidad de resultados
.getResultList();
}
@Transactional(readOnly = true)
public List<Recurso> buscarPorAutor(String autor) {
public List<Recurso> buscarPorAutor(String autor, int maxResults) {
return em.createQuery(
"SELECT r FROM Recurso r WHERE LOWER(r.autor) LIKE LOWER(:autor)",
"SELECT r FROM Recurso r WHERE LOWER(r.autor) LIKE LOWER(:autor)",
Recurso.class)
.setParameter("autor", "%" + autor + "%")
.setMaxResults(maxResults) // Limita la cantidad de resultados
.getResultList();
}
@Transactional(readOnly = true)
public List<Recurso> buscarPorGenero(Genero genero) {
return em.createQuery(
"SELECT r FROM Recurso r JOIN r.generos g WHERE g = :genero",
"SELECT DISTINCT r FROM Recurso r JOIN FETCH r.generos g WHERE g = :genero",
Recurso.class)
.setParameter("genero", genero)
.getResultList();
}
@Transactional(readOnly = true)
public List<Recurso> buscarPorRangoFechas(LocalDate fechaInicio, LocalDate fechaFin) {
public List<Recurso> buscarPorRangoFechas(LocalDate fechaInicio, LocalDate fechaFin, int maxResults) {
return em.createQuery(
"SELECT r FROM Recurso r WHERE r.fechaPublicacion BETWEEN :inicio AND :fin",
"SELECT r FROM Recurso r WHERE r.fechaPublicacion BETWEEN :inicio AND :fin ORDER BY r.fechaPublicacion ASC",
Recurso.class)
.setParameter("inicio", fechaInicio)
.setParameter("fin", fechaFin)
.setMaxResults(maxResults) // Limita la cantidad de resultados
.getResultList();
}
public Recurso merge(Recurso recurso) {
public Recurso actualiza(Recurso recurso) {
return em.merge(recurso);
}
@Transactional
public void borrarRecurso(Recurso recurso) {
recurso = em.merge(recurso);
recurso.getCapitulosManga().clear();
recurso.getCapitulosAnime().clear();
em.flush();
recurso = em.contains(recurso) ? recurso : em.merge(recurso);
em.remove(recurso);
}
......@@ -83,4 +84,17 @@ public class RepositorioRecurso {
public List<Recurso> listarRecursos() {
return em.createQuery("SELECT r FROM Recurso r", Recurso.class).getResultList();
}
@Transactional(readOnly = true)
public boolean existeRecurso(String titulo, String autor, LocalDate fechaPublicacion) {
Long count = em.createQuery(
"SELECT COUNT(r) FROM Recurso r WHERE LOWER(r.titulo) = LOWER(:titulo) " +
"AND r.autor = :autor AND r.fechaPublicacion = :fecha",
Long.class)
.setParameter("titulo", titulo)
.setParameter("autor", autor)
.setParameter("fecha", fechaPublicacion)
.getSingleResult();
return count > 0;
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment