Commit c8cf46e8 by Rubén Ramírez

fix: [BibliotecaPersonal]: Correcciones a la hora de trabajar con la biblioteca personal

parent 98cb4fc1
......@@ -2,6 +2,7 @@ package com.ujaen.tfg.mangaffinity.repositorios;
import com.ujaen.tfg.mangaffinity.entidades.BibliotecaPersonalRecurso;
import com.ujaen.tfg.mangaffinity.entidades.Categoria;
import com.ujaen.tfg.mangaffinity.excepciones.RecursoSinCategoria;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
......@@ -38,10 +39,15 @@ public class RepositorioBibliotecaPersonalRecurso {
public void actualizarCategoriaRecurso(Long bibliotecaPersonalId, Long recursoId, Categoria nuevaCategoria) {
em.createQuery("UPDATE BibliotecaPersonalRecurso bpr SET bpr.categoria = :nuevaCategoria WHERE bpr.bibliotecaPersonal.id = :bibliotecaPersonalId AND bpr.recurso.id = :recursoId")
int updated = em.createQuery("UPDATE BibliotecaPersonalRecurso bpr SET bpr.categoria = :nuevaCategoria WHERE bpr.bibliotecaPersonal.id = :bibliotecaPersonalId AND bpr.recurso.id = :recursoId")
.setParameter("nuevaCategoria", nuevaCategoria)
.setParameter("bibliotecaPersonalId", bibliotecaPersonalId)
.setParameter("recursoId", recursoId)
.executeUpdate();
if (updated == 0) {
throw new RecursoSinCategoria();
}
}
}
......@@ -66,57 +66,49 @@ public class BibliotecaPersonalController {
}
}
@GetMapping("/{usuarioId}/recursos/categoria/{categoria}")
public ResponseEntity<List<DTORecursoEnBiblioteca>> listarRecursosPorCategoria(@PathVariable Long usuarioId, @PathVariable Categoria categoria) {
@PutMapping("/{usuarioId}/recursos/{recursoId}/categoria")
public ResponseEntity<String> modificarCategoriaDeRecurso(
@PathVariable Long usuarioId,
@PathVariable Long recursoId,
@RequestBody DTORecursoEnBiblioteca dtoRecurso) {
try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
List<BibliotecaPersonalRecurso> recursos = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), categoria);
List<DTORecursoEnBiblioteca> dtoRecursos = recursos.stream()
.map(bpr -> new DTORecursoEnBiblioteca(bpr.getRecurso().getId(), bpr.getRecurso().getTitulo(), bpr.getCategoria()))
.collect(Collectors.toList());
return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
boolean existe = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), dtoRecurso.getCategoria())
.stream()
.anyMatch(bpr -> bpr.getRecurso().getId().equals(recursoId));
@DeleteMapping("/{usuarioId}/recursos/{recursoId}")
public ResponseEntity<String> eliminarRecursoDeBiblioteca(
@PathVariable Long usuarioId, @PathVariable Long recursoId) {
try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) {
if (!existe) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
servicioBibliotecaPersonal.eliminarRecurso(biblioteca.getId(), recursoId);
servicioBibliotecaPersonal.modificarCategoria(biblioteca.getId(), recursoId, dtoRecurso.getCategoria());
return ResponseEntity.status(HttpStatus.OK).build();
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
@PutMapping("/{usuarioId}/recursos/{recursoId}/categoria")
public ResponseEntity<String> modificarCategoriaDeRecurso(
@PathVariable Long usuarioId, @PathVariable Long recursoId, @RequestBody DTORecursoEnBiblioteca dtoRecurso) {
@GetMapping("/{usuarioId}/recursos/categoria/{categoria}")
public ResponseEntity<List<DTORecursoEnBiblioteca>> listarRecursosPorCategoria(
@PathVariable Long usuarioId, @PathVariable Categoria categoria) {
try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
servicioBibliotecaPersonal.modificarCategoria(biblioteca.getId(), recursoId, dtoRecurso.getCategoria());
return ResponseEntity.status(HttpStatus.OK).build();
List<BibliotecaPersonalRecurso> recursos = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), categoria);
List<DTORecursoEnBiblioteca> dtoRecursos = recursos.stream()
.map(bpr -> new DTORecursoEnBiblioteca(bpr.getRecurso().getId(), bpr.getRecurso().getTitulo(), bpr.getCategoria()))
.collect(Collectors.toList());
return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}
......@@ -30,14 +30,8 @@ public class ServicioBibliotecaPersonal {
}
@Transactional
public void eliminarRecurso(Long bibliotecaPersonalId, Long recursoId) {
repositorioBibliotecaPersonalRecurso.eliminarRecursoDeBiblioteca(bibliotecaPersonalId, recursoId);
}
// Modificar la categoría de un recurso
@Transactional
public void modificarCategoria(Long bibliotecaPersonalId, Long recursoId, Categoria nuevaCategoria) {
repositorioBibliotecaPersonalRecurso.actualizarCategoriaRecurso(bibliotecaPersonalId, recursoId, nuevaCategoria);
}
}
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