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;
import org.springframework.web.bind.annotation.*;
import java.util.Base64;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@RestController
......@@ -29,45 +30,59 @@ public class BibliotecaPersonalController {
@Autowired
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")
public ResponseEntity<String> anadirRecursoBiblioteca(
public ResponseEntity<Void> anadirRecursoBiblioteca(
@PathVariable Long usuarioId,
@PathVariable Long recursoId,
@RequestBody DTORecursoEnBiblioteca dtoRecursoEnBiblioteca) {
try {
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);
if (recurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
boolean yaExiste = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), dtoRecursoEnBiblioteca.getCategoria())
.stream()
.anyMatch(bpr -> bpr.getRecurso().getId().equals(recursoId));
if (recurso == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
if (yaExiste) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}
boolean yaExiste = servicioBibliotecaPersonal
.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();
} catch (Exception e) {
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}")
public ResponseEntity<List<DTORecursoEnBiblioteca>> listarRecursosPorCategoria(
@PathVariable Long usuarioId, @PathVariable String categoria) {
try {
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;
try {
......@@ -77,36 +92,43 @@ public class BibliotecaPersonalController {
}
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().getTitulo(),
bpr.getCategoria(),
fotoBase64
);
})
(bpr.getRecurso().getFoto() != null)
? "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(bpr.getRecurso().getFoto())
: null
))
.collect(Collectors.toList());
return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) {
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}")
public ResponseEntity<String> eliminarRecursoDeBiblioteca(
public ResponseEntity<Void> eliminarRecursoDeBiblioteca(
@PathVariable Long usuarioId,
@PathVariable Long recursoId) {
try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
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);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
} catch (Exception e) {
......@@ -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}")
public ResponseEntity<DTORecursoEnBiblioteca> obtenerRecursoEnBiblioteca(
@PathVariable Long usuarioId, @PathVariable Long recursoId) {
try {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
if (biblioteca == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
if (biblioteca == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
BibliotecaPersonalRecurso bibliotecaPersonalRecurso = servicioBibliotecaPersonal.buscarRecursoEnBiblioteca(biblioteca.getId(), recursoId);
if (bibliotecaPersonalRecurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
Optional<BibliotecaPersonalRecurso> recursoOpt = servicioBibliotecaPersonal.buscarRecursoEnBiblioteca(biblioteca.getId(), recursoId);
if (recursoOpt.isEmpty()) return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
BibliotecaPersonalRecurso bibliotecaPersonalRecurso = recursoOpt.get();
DTORecursoEnBiblioteca dtoRecursoEnBiblioteca = new DTORecursoEnBiblioteca(
bibliotecaPersonalRecurso.getRecurso().getId(),
bibliotecaPersonalRecurso.getRecurso().getTitulo(),
bibliotecaPersonalRecurso.getCategoria(),
(bibliotecaPersonalRecurso.getRecurso().getFoto() != null)
? Base64.getEncoder().encodeToString(bibliotecaPersonalRecurso.getRecurso().getFoto())
? "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(bibliotecaPersonalRecurso.getRecurso().getFoto())
: null
);
return ResponseEntity.ok(dtoRecursoEnBiblioteca);
......@@ -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")
public ResponseEntity<String> cambiarCategoria(
public ResponseEntity<Void> cambiarCategoria(
@PathVariable Long usuarioId,
@PathVariable Long recursoId,
@RequestBody DTORecursoEnBiblioteca dtoRecurso) {
......@@ -152,10 +187,13 @@ public class BibliotecaPersonalController {
BibliotecaPersonal biblioteca = servicioUsuarios.obtenerBibliotecaDeUsuario(usuarioId);
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());
return ResponseEntity.status(HttpStatus.OK).build();
return ResponseEntity.ok().build();
} catch (Exception e) {
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