Commit ecff9b3a by Rubén Ramírez

fix: [BibliotecaPersonalController]: Corregidas algunas funciones en el…

fix: [BibliotecaPersonalController]: Corregidas algunas funciones en el controlador a la hora de devolver un status y otro para el front posterior
parent 91c78484
...@@ -14,6 +14,7 @@ import org.springframework.http.ResponseEntity; ...@@ -14,6 +14,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Base64; import java.util.Base64;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@RestController @RestController
...@@ -29,45 +30,59 @@ public class BibliotecaPersonalController { ...@@ -29,45 +30,59 @@ public class BibliotecaPersonalController {
@Autowired @Autowired
private ServicioUsuarios servicioUsuarios; private ServicioUsuarios servicioUsuarios;
/**
* Añade un recurso a la biblioteca personal del usuario.
* Devuelve:
* - 201 CREATED si se agrega correctamente.
* - 404 NOT FOUND si la biblioteca o el recurso no existen.
* - 409 CONFLICT si el recurso ya está en la biblioteca.
* - 500 INTERNAL SERVER ERROR en caso de fallo inesperado.
*/
@PostMapping("/{usuarioId}/recursos/{recursoId}/categoria") @PostMapping("/{usuarioId}/recursos/{recursoId}/categoria")
public ResponseEntity<String> anadirRecursoBiblioteca( public ResponseEntity<Void> anadirRecursoBiblioteca(
@PathVariable Long usuarioId, @PathVariable Long usuarioId,
@PathVariable Long recursoId, @PathVariable Long recursoId,
@RequestBody DTORecursoEnBiblioteca dtoRecursoEnBiblioteca) { @RequestBody DTORecursoEnBiblioteca dtoRecursoEnBiblioteca) {
try { try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId); BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
Recurso recurso = servicioRecursos.buscarRecursoPorId(recursoId); Recurso recurso = servicioRecursos.buscarRecursoPorId(recursoId);
if (recurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
boolean yaExiste = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), dtoRecursoEnBiblioteca.getCategoria()) if (recurso == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
.stream()
.anyMatch(bpr -> bpr.getRecurso().getId().equals(recursoId));
if (yaExiste) { boolean yaExiste = servicioBibliotecaPersonal
return ResponseEntity.status(HttpStatus.CONFLICT).build(); .buscarRecursoEnBiblioteca(biblioteca.getId(), recursoId)
} .isPresent();
if (yaExiste) return ResponseEntity.status(HttpStatus.CONFLICT).build();
servicioBibliotecaPersonal.anadirRecursoBiblioteca(biblioteca.getId(), recurso.getId(), dtoRecursoEnBiblioteca.getCategoria());
servicioBibliotecaPersonal.anadirRecursoBiblioteca(biblioteca, recurso, dtoRecursoEnBiblioteca.getCategoria());
return ResponseEntity.status(HttpStatus.CREATED).build(); return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
} }
} }
/**
* Lista los recursos de una biblioteca por categoría.
* Devuelve:
* - 200 OK con la lista de recursos si existen.
* - 204 NO CONTENT si no hay recursos en la categoría.
* - 400 BAD REQUEST si la categoría es inválida.
* - 404 NOT FOUND si la biblioteca no existe.
* - 500 INTERNAL SERVER ERROR en caso de error inesperado.
*/
@GetMapping("/{usuarioId}/recursos/categoria/{categoria}") @GetMapping("/{usuarioId}/recursos/categoria/{categoria}")
public ResponseEntity<List<DTORecursoEnBiblioteca>> listarRecursosPorCategoria( public ResponseEntity<List<DTORecursoEnBiblioteca>> listarRecursosPorCategoria(
@PathVariable Long usuarioId, @PathVariable String categoria) { @PathVariable Long usuarioId, @PathVariable String categoria) {
try { try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId); BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
Categoria categoriaEnum; Categoria categoriaEnum;
try { try {
...@@ -77,36 +92,43 @@ public class BibliotecaPersonalController { ...@@ -77,36 +92,43 @@ public class BibliotecaPersonalController {
} }
List<BibliotecaPersonalRecurso> recursos = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), categoriaEnum); List<BibliotecaPersonalRecurso> recursos = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), categoriaEnum);
List<DTORecursoEnBiblioteca> dtoRecursos = recursos.stream()
.map(bpr -> {
String fotoBase64 = (bpr.getRecurso().getFoto() != null && bpr.getRecurso().getFoto().length > 0)
? "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(bpr.getRecurso().getFoto())
: null;
return new DTORecursoEnBiblioteca( if (recursos.isEmpty()) return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
List<DTORecursoEnBiblioteca> dtoRecursos = recursos.stream()
.map(bpr -> new DTORecursoEnBiblioteca(
bpr.getRecurso().getId(), bpr.getRecurso().getId(),
bpr.getRecurso().getTitulo(), bpr.getRecurso().getTitulo(),
bpr.getCategoria(), bpr.getCategoria(),
fotoBase64 (bpr.getRecurso().getFoto() != null)
); ? "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(bpr.getRecurso().getFoto())
}) : null
))
.collect(Collectors.toList()); .collect(Collectors.toList());
return ResponseEntity.ok(dtoRecursos); return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
} }
} }
/**
* Elimina un recurso de la biblioteca personal del usuario.
* Devuelve:
* - 204 NO CONTENT si se elimina correctamente.
* - 404 NOT FOUND si la biblioteca o el recurso no existen.
* - 500 INTERNAL SERVER ERROR en caso de error inesperado.
*/
@DeleteMapping("/{usuarioId}/recursos/{recursoId}") @DeleteMapping("/{usuarioId}/recursos/{recursoId}")
public ResponseEntity<String> eliminarRecursoDeBiblioteca( public ResponseEntity<Void> eliminarRecursoDeBiblioteca(
@PathVariable Long usuarioId, @PathVariable Long usuarioId,
@PathVariable Long recursoId) { @PathVariable Long recursoId) {
try { try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId); BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
boolean existe = servicioBibliotecaPersonal.buscarRecursoEnBiblioteca(biblioteca.getId(), recursoId).isPresent();
if (!existe) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
servicioBibliotecaPersonal.eliminarRecursoDeBiblioteca(biblioteca.getId(), recursoId); servicioBibliotecaPersonal.eliminarRecursoDeBiblioteca(biblioteca.getId(), recursoId);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
} catch (Exception e) { } catch (Exception e) {
...@@ -114,27 +136,32 @@ public class BibliotecaPersonalController { ...@@ -114,27 +136,32 @@ public class BibliotecaPersonalController {
} }
} }
/**
* Obtiene un recurso de la biblioteca personal del usuario.
* Devuelve:
* - 200 OK con el recurso si existe.
* - 204 NO CONTENT si el recurso no está en la biblioteca.
* - 404 NOT FOUND si la biblioteca no existe.
* - 500 INTERNAL SERVER ERROR en caso de error inesperado.
*/
@GetMapping("/{usuarioId}/recursos/{recursoId}") @GetMapping("/{usuarioId}/recursos/{recursoId}")
public ResponseEntity<DTORecursoEnBiblioteca> obtenerRecursoEnBiblioteca( public ResponseEntity<DTORecursoEnBiblioteca> obtenerRecursoEnBiblioteca(
@PathVariable Long usuarioId, @PathVariable Long recursoId) { @PathVariable Long usuarioId, @PathVariable Long recursoId) {
try { try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId); BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) { if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
BibliotecaPersonalRecurso bibliotecaPersonalRecurso = servicioBibliotecaPersonal.buscarRecursoEnBiblioteca(biblioteca.getId(), recursoId); Optional<BibliotecaPersonalRecurso> recursoOpt = servicioBibliotecaPersonal.buscarRecursoEnBiblioteca(biblioteca.getId(), recursoId);
if (bibliotecaPersonalRecurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); if (recursoOpt.isEmpty()) return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
BibliotecaPersonalRecurso bibliotecaPersonalRecurso = recursoOpt.get();
DTORecursoEnBiblioteca dtoRecursoEnBiblioteca = new DTORecursoEnBiblioteca( DTORecursoEnBiblioteca dtoRecursoEnBiblioteca = new DTORecursoEnBiblioteca(
bibliotecaPersonalRecurso.getRecurso().getId(), bibliotecaPersonalRecurso.getRecurso().getId(),
bibliotecaPersonalRecurso.getRecurso().getTitulo(), bibliotecaPersonalRecurso.getRecurso().getTitulo(),
bibliotecaPersonalRecurso.getCategoria(), bibliotecaPersonalRecurso.getCategoria(),
(bibliotecaPersonalRecurso.getRecurso().getFoto() != null) (bibliotecaPersonalRecurso.getRecurso().getFoto() != null)
? Base64.getEncoder().encodeToString(bibliotecaPersonalRecurso.getRecurso().getFoto()) ? "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(bibliotecaPersonalRecurso.getRecurso().getFoto())
: null : null
); );
return ResponseEntity.ok(dtoRecursoEnBiblioteca); return ResponseEntity.ok(dtoRecursoEnBiblioteca);
...@@ -143,8 +170,16 @@ public class BibliotecaPersonalController { ...@@ -143,8 +170,16 @@ public class BibliotecaPersonalController {
} }
} }
/**
* Cambia la categoría de un recurso en la biblioteca personal del usuario.
* Devuelve:
* - 200 OK si se cambia correctamente.
* - 400 BAD REQUEST si la categoría es nula.
* - 404 NOT FOUND si la biblioteca no existe.
* - 500 INTERNAL SERVER ERROR en caso de error inesperado.
*/
@PutMapping("/{usuarioId}/recursos/{recursoId}/categoria") @PutMapping("/{usuarioId}/recursos/{recursoId}/categoria")
public ResponseEntity<String> cambiarCategoria( public ResponseEntity<Void> cambiarCategoria(
@PathVariable Long usuarioId, @PathVariable Long usuarioId,
@PathVariable Long recursoId, @PathVariable Long recursoId,
@RequestBody DTORecursoEnBiblioteca dtoRecurso) { @RequestBody DTORecursoEnBiblioteca dtoRecurso) {
...@@ -152,10 +187,13 @@ public class BibliotecaPersonalController { ...@@ -152,10 +187,13 @@ public class BibliotecaPersonalController {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId); BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
if (dtoRecurso.getCategoria() == null) return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
servicioBibliotecaPersonal.cambiarCategoriaRecurso(biblioteca.getId(), recursoId, dtoRecurso.getCategoria()); servicioBibliotecaPersonal.cambiarCategoriaRecurso(biblioteca.getId(), recursoId, dtoRecurso.getCategoria());
return ResponseEntity.status(HttpStatus.OK).build(); return ResponseEntity.ok().build();
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
} }
} }
}
}
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