Commit 91c78484 by Rubén Ramírez

fix: [ServicioBibliotecaPersonal]: Corregidas algunas funciones en servicio a la…

fix: [ServicioBibliotecaPersonal]: Corregidas algunas funciones en servicio a la hora de trabajar con el repostiorio y controlador
parent 81785ec1
......@@ -4,12 +4,15 @@ import com.ujaen.tfg.mangaffinity.entidades.BibliotecaPersonal;
import com.ujaen.tfg.mangaffinity.entidades.BibliotecaPersonalRecurso;
import com.ujaen.tfg.mangaffinity.entidades.Categoria;
import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.excepciones.RecursoEnBiblioteca;
import com.ujaen.tfg.mangaffinity.excepciones.RecursoNoExiste;
import com.ujaen.tfg.mangaffinity.excepciones.RecursoSinCategoria;
import com.ujaen.tfg.mangaffinity.excepciones.UsuarioSinBiblioteca;
import com.ujaen.tfg.mangaffinity.repositorios.RepositorioBibliotecaPersonalRecurso;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
import java.util.List;
@Service
......@@ -18,52 +21,99 @@ public class ServicioBibliotecaPersonal {
@Autowired
private RepositorioBibliotecaPersonalRecurso repositorioBibliotecaPersonalRecurso;
/**
* @brief Añade un recurso a la biblioteca personal del usuario.
* @param bibliotecaPersonalId ID de la biblioteca personal.
* @param recursoId ID del recurso a añadir.
* @param categoria Categoría del recurso.
* @throws UsuarioSinBiblioteca Si la biblioteca no existe.
* @throws RecursoNoExiste Si el recurso no existe.
* @throws RecursoSinCategoria Si la categoría es nula.
* @throws RecursoEnBiblioteca Si el recurso ya está en la biblioteca.
*/
@Transactional
public void anadirRecursoBiblioteca(BibliotecaPersonal bibliotecaPersonal, Recurso recurso, Categoria categoria) {
public void anadirRecursoBiblioteca(Long bibliotecaPersonalId, Long recursoId, Categoria categoria) {
BibliotecaPersonal bibliotecaPersonal = repositorioBibliotecaPersonalRecurso
.obtenerBibliotecaPorId(bibliotecaPersonalId)
.orElseThrow(UsuarioSinBiblioteca::new);
Recurso recurso = repositorioBibliotecaPersonalRecurso
.obtenerRecursoPorId(recursoId)
.orElseThrow(RecursoNoExiste::new);
if (categoria == null) throw new RecursoSinCategoria();
boolean existe = repositorioBibliotecaPersonalRecurso
.buscarRecursoEnBiblioteca(bibliotecaPersonalId, recursoId)
.isPresent();
if (existe) throw new RecursoEnBiblioteca();
BibliotecaPersonalRecurso bibliotecaRecurso = new BibliotecaPersonalRecurso(bibliotecaPersonal, recurso, categoria);
repositorioBibliotecaPersonalRecurso.anadirRecursoBiblioteca(bibliotecaRecurso);
}
/**
* @brief Lista los recursos de una biblioteca por categoría.
* @param bibliotecaPersonalId ID de la biblioteca personal.
* @param categoria Categoría de los recursos a listar.
* @return Lista de recursos en la categoría especificada.
*/
@Transactional(readOnly = true)
public List<BibliotecaPersonalRecurso> listarPorCategoria(Long bibliotecaPersonalId, Categoria categoria) {
return repositorioBibliotecaPersonalRecurso.listarPorCategoria(bibliotecaPersonalId, categoria);
}
@Transactional
public void modificarCategoria(Long bibliotecaPersonalId, Long recursoId, Categoria nuevaCategoria) {
repositorioBibliotecaPersonalRecurso.actualizarCategoriaRecurso(bibliotecaPersonalId, recursoId, nuevaCategoria);
}
/**
* @brief Cambia la categoría de un recurso en la biblioteca personal.
* @param bibliotecaPersonalId ID de la biblioteca personal.
* @param recursoId ID del recurso a modificar.
* @param nuevaCategoria Nueva categoría del recurso.
* @throws RecursoNoExiste Si el recurso no está en la biblioteca.
*/
@Transactional
public void cambiarCategoriaRecurso(Long bibliotecaPersonalId, Long recursoId, Categoria nuevaCategoria) {
// Eliminar la entrada existente en cualquier categoría
eliminarRecursoDeBiblioteca(bibliotecaPersonalId, recursoId);
BibliotecaPersonalRecurso recurso = repositorioBibliotecaPersonalRecurso
.buscarRecursoEnBiblioteca(bibliotecaPersonalId, recursoId)
.orElseThrow(RecursoNoExiste::new);
// Obtener la bibliotecaPersonal y el recurso desde el repositorio
BibliotecaPersonal bibliotecaPersonal = repositorioBibliotecaPersonalRecurso.obtenerBibliotecaPorId(bibliotecaPersonalId);
if (bibliotecaPersonal == null) {
throw new IllegalArgumentException("Biblioteca personal no encontrada para el ID: " + bibliotecaPersonalId);
}
if (recurso.getCategoria().equals(nuevaCategoria)) return;
Recurso recurso = repositorioBibliotecaPersonalRecurso.obtenerRecursoPorId(recursoId);
if (recurso == null) {
throw new IllegalArgumentException("Recurso no encontrado para el ID: " + recursoId);
}
eliminarRecursoDeBiblioteca(bibliotecaPersonalId, recursoId);
// Añadir el recurso a la nueva categoría
BibliotecaPersonalRecurso bibliotecaRecurso = new BibliotecaPersonalRecurso(bibliotecaPersonal, recurso, nuevaCategoria);
BibliotecaPersonalRecurso bibliotecaRecurso = new BibliotecaPersonalRecurso(
recurso.getBibliotecaPersonal(),
recurso.getRecurso(),
nuevaCategoria
);
repositorioBibliotecaPersonalRecurso.anadirRecursoBiblioteca(bibliotecaRecurso);
}
/**
* @brief Elimina un recurso de la biblioteca personal del usuario.
* @param bibliotecaPersonalId ID de la biblioteca personal.
* @param recursoId ID del recurso a eliminar.
* @throws RecursoNoExiste Si el recurso no está en la biblioteca.
*/
@Transactional
public void eliminarRecursoDeBiblioteca(Long bibliotecaPersonalId, Long recursoId) {
Optional<BibliotecaPersonalRecurso> recursoEnBiblioteca =
repositorioBibliotecaPersonalRecurso.buscarRecursoEnBiblioteca(bibliotecaPersonalId, recursoId);
if (recursoEnBiblioteca.isEmpty()) throw new RecursoNoExiste();
repositorioBibliotecaPersonalRecurso.eliminarRecursoDeBiblioteca(bibliotecaPersonalId, recursoId);
}
public BibliotecaPersonalRecurso buscarRecursoEnBiblioteca(Long bibliotecaPersonalId, Long recursoId) {
/**
* @brief Busca un recurso en la biblioteca personal del usuario.
* @param bibliotecaPersonalId ID de la biblioteca personal.
* @param recursoId ID del recurso a buscar.
* @return Un Optional con el recurso si se encuentra en la biblioteca.
*/
public Optional<BibliotecaPersonalRecurso> buscarRecursoEnBiblioteca(Long bibliotecaPersonalId, Long recursoId) {
return repositorioBibliotecaPersonalRecurso.buscarRecursoEnBiblioteca(bibliotecaPersonalId, recursoId);
}
}
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