Commit 0c3a74d2 by Rubén Ramírez

fix: [ServicioRecursos]: Añadidos unos métodos para completar todas las funcionalidades

parent e52e200f
...@@ -31,9 +31,8 @@ public class ServicioRecursos { ...@@ -31,9 +31,8 @@ public class ServicioRecursos {
*/ */
@Transactional @Transactional
public void crearRecurso(@Valid Recurso recurso) { public void crearRecurso(@Valid Recurso recurso) {
if (repositorioRecurso.existeRecurso(recurso.getTitulo(), recurso.getAutor(), recurso.getFechaPublicacion())) { if (repositorioRecurso.existeRecurso(recurso.getTitulo(), recurso.getAutor(), recurso.getFechaPublicacion())) throw new RecursoYaExiste();
throw new RecursoYaExiste();
}
repositorioRecurso.crear(recurso); repositorioRecurso.crear(recurso);
} }
...@@ -54,9 +53,8 @@ public class ServicioRecursos { ...@@ -54,9 +53,8 @@ public class ServicioRecursos {
* Devuelve una lista vacía si el título es nulo o vacío. * Devuelve una lista vacía si el título es nulo o vacío.
*/ */
public List<Recurso> buscarRecursoPorTitulo(String titulo) { public List<Recurso> buscarRecursoPorTitulo(String titulo) {
if (titulo == null || titulo.trim().isEmpty()) { if (titulo == null || titulo.trim().isEmpty()) return List.of();
return List.of();
}
return repositorioRecurso.buscarPorTitulo(titulo, 50); return repositorioRecurso.buscarPorTitulo(titulo, 50);
} }
...@@ -64,12 +62,11 @@ public class ServicioRecursos { ...@@ -64,12 +62,11 @@ public class ServicioRecursos {
* @brief Busca recursos por autor. * @brief Busca recursos por autor.
* @param autor Nombre del autor a buscar. * @param autor Nombre del autor a buscar.
* @return Lista de recursos del autor, hasta un máximo de 50. * @return Lista de recursos del autor, hasta un máximo de 50.
* Devuelve una lista vacía si el autor es nulo o vacío. * Devuelve una lista vacía si el autor es nulo o vacío.
*/ */
public List<Recurso> buscarRecursoPorAutor(String autor) { public List<Recurso> buscarRecursoPorAutor(String autor) {
if (autor == null || autor.trim().isEmpty()) { if (autor == null || autor.trim().isEmpty()) return List.of();
return List.of();
}
return repositorioRecurso.buscarPorAutor(autor, 50); return repositorioRecurso.buscarPorAutor(autor, 50);
} }
...@@ -80,9 +77,8 @@ public class ServicioRecursos { ...@@ -80,9 +77,8 @@ public class ServicioRecursos {
*/ */
@Transactional(readOnly = true) @Transactional(readOnly = true)
public List<Recurso> buscarRecursoPorGenero(Genero genero) { public List<Recurso> buscarRecursoPorGenero(Genero genero) {
if (genero == null) { if (genero == null) return List.of();
return List.of();
}
return repositorioRecurso.buscarPorGenero(genero); return repositorioRecurso.buscarPorGenero(genero);
} }
...@@ -152,9 +148,7 @@ public class ServicioRecursos { ...@@ -152,9 +148,7 @@ public class ServicioRecursos {
*/ */
@Transactional @Transactional
public void actualizarFotoRecurso(Long recursoId, byte[] nuevaFoto) { public void actualizarFotoRecurso(Long recursoId, byte[] nuevaFoto) {
if (nuevaFoto == null || nuevaFoto.length == 0) { if (nuevaFoto == null || nuevaFoto.length == 0) throw new FotoInvalida();
throw new FotoInvalida();
}
Recurso recurso = repositorioRecurso.buscarPorId(recursoId) Recurso recurso = repositorioRecurso.buscarPorId(recursoId)
.orElseThrow(RecursoNoExiste::new); .orElseThrow(RecursoNoExiste::new);
...@@ -164,20 +158,31 @@ public class ServicioRecursos { ...@@ -164,20 +158,31 @@ public class ServicioRecursos {
} }
/** /**
* @brief Obtiene los capítulos de un recurso según su tipo. * @brief Añade un nuevo capítulo a un recurso.
* @param recursoId Identificador del recurso. * @param recursoId Identificador del recurso al que se añadirá el capítulo.
* @param tipo Tipo de recurso a filtrar. * @param nuevoCapitulo Objeto Capitulo con los datos a registrar.
* @return Lista de capítulos del recurso para el tipo especificado. Devuelve una lista vacía si no hay capítulos. * @throws IllegalArgumentException Si el recursoId es nulo o negativo.
* @throws RecursoSinTipo Si el tipo de recurso es nulo. * @throws IllegalArgumentException Si el capítulo es nulo.
* @throws RecursoNoExiste Si el recurso no se encuentra en la base de datos.
* Asigna el recurso al capítulo y establece las relaciones con sus fuentes antes de guardarlo.
*/ */
@Transactional(readOnly = true) @Transactional
public List<Capitulo> obtenerCapitulosDeRecursoPorTipo(Long recursoId, TipoRecurso tipo) { public void anadirCapitulo(Long recursoId, Capitulo nuevoCapitulo) {
if (tipo == null) { if (recursoId == null || recursoId < 1) throw new IllegalArgumentException("El ID del recurso no puede ser nulo o negativo.");
throw new RecursoSinTipo();
}
return Optional.ofNullable(repositorioCapitulo.obtenerCapitulosPorTipo(recursoId, tipo)) if (nuevoCapitulo == null) throw new CapituloInvalido();
.orElse(List.of());
Recurso recurso = repositorioRecurso.buscarPorId(recursoId)
.orElseThrow(RecursoNoExiste::new);
nuevoCapitulo.setRecurso(recurso);
Optional.ofNullable(nuevoCapitulo.getFuentes()).ifPresent(fuentes ->
fuentes.forEach(fuente -> fuente.setCapitulo(nuevoCapitulo))
);
repositorioCapitulo.crearCapitulo(nuevoCapitulo);
} }
/** /**
...@@ -196,6 +201,21 @@ public class ServicioRecursos { ...@@ -196,6 +201,21 @@ public class ServicioRecursos {
} }
/** /**
* @brief Obtiene los capítulos de un recurso según su tipo.
* @param recursoId Identificador del recurso.
* @param tipo Tipo de recurso a filtrar.
* @return Lista de capítulos del recurso para el tipo especificado. Devuelve una lista vacía si no hay capítulos.
* @throws RecursoSinTipo Si el tipo de recurso es nulo.
*/
@Transactional(readOnly = true)
public List<Capitulo> obtenerCapitulosDeRecursoPorTipo(Long recursoId, TipoRecurso tipo) {
if (tipo == null) throw new RecursoSinTipo();
return Optional.ofNullable(repositorioCapitulo.obtenerCapitulosPorTipo(recursoId, tipo))
.orElse(List.of());
}
/**
* @brief Obtiene la lista de todos los géneros disponibles. * @brief Obtiene la lista de todos los géneros disponibles.
* @return Lista de nombres de los géneros en formato de cadena. * @return Lista de nombres de los géneros en formato de cadena.
*/ */
...@@ -206,36 +226,6 @@ public class ServicioRecursos { ...@@ -206,36 +226,6 @@ public class ServicioRecursos {
} }
/** /**
* @brief Añade un nuevo capítulo a un recurso.
* @param recursoId Identificador del recurso al que se añadirá el capítulo.
* @param nuevoCapitulo Objeto Capitulo con los datos a registrar.
* @throws IllegalArgumentException Si el recursoId es nulo o negativo.
* @throws IllegalArgumentException Si el capítulo es nulo.
* @throws RecursoNoExiste Si el recurso no se encuentra en la base de datos.
* Asigna el recurso al capítulo y establece las relaciones con sus fuentes antes de guardarlo.
*/
@Transactional
public void anadirCapitulo(Long recursoId, Capitulo nuevoCapitulo) {
if (recursoId == null || recursoId < 1) {
throw new IllegalArgumentException("El ID del recurso no puede ser nulo o negativo.");
}
if (nuevoCapitulo == null) {
throw new CapituloInvalido();
}
Recurso recurso = repositorioRecurso.buscarPorId(recursoId)
.orElseThrow(RecursoNoExiste::new);
nuevoCapitulo.setRecurso(recurso);
Optional.ofNullable(nuevoCapitulo.getFuentes()).ifPresent(fuentes ->
fuentes.forEach(fuente -> fuente.setCapitulo(nuevoCapitulo))
);
repositorioCapitulo.crearCapitulo(nuevoCapitulo);
}
/**
* Modifica un capítulo existente dentro de un recurso. * Modifica un capítulo existente dentro de un recurso.
* @param recursoId ID del recurso al que pertenece el capítulo. * @param recursoId ID del recurso al que pertenece el capítulo.
* @param capituloModificado Entidad Capitulo con los nuevos datos. * @param capituloModificado Entidad Capitulo con los nuevos datos.
...@@ -319,9 +309,8 @@ public class ServicioRecursos { ...@@ -319,9 +309,8 @@ public class ServicioRecursos {
*/ */
@Transactional @Transactional
public void agregarFuente(FuenteCapitulo fuente) { public void agregarFuente(FuenteCapitulo fuente) {
if (fuente == null || fuente.getCapitulo() == null) { if (fuente == null || fuente.getCapitulo() == null) throw new IllegalArgumentException("La fuente y su capítulo no pueden ser nulos.");
throw new IllegalArgumentException("La fuente y su capítulo no pueden ser nulos.");
}
repositorioCapitulo.agregarFuente(fuente); repositorioCapitulo.agregarFuente(fuente);
} }
......
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