Commit d219c69e by Rubén Ramírez

feat: [Metodos Recurso]: Corregidos los test por el nuevo atrinuto

parent e8628c2d
...@@ -18,6 +18,21 @@ import java.time.LocalDate; ...@@ -18,6 +18,21 @@ import java.time.LocalDate;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.io.File;import org.springframework.web.multipart.MultipartFile;import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.Mapper;
import com.ujaen.tfg.mangaffinity.servicios.ServicioRecursos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.time.LocalDate;
import java.util.UUID;
@RestController @RestController
@RequestMapping("/recursos") @RequestMapping("/recursos")
...@@ -28,17 +43,60 @@ public class RecursosController { ...@@ -28,17 +43,60 @@ public class RecursosController {
@Autowired @Autowired
private Mapper mapper; private Mapper mapper;
@PostMapping("/") @PostMapping(value = "/", consumes = {"multipart/form-data"})
public ResponseEntity<String> crearRecurso(@RequestBody DTORecurso recurso) { public ResponseEntity<String> crearRecurso(
@RequestPart("recurso") DTORecurso recursoDTO,
@RequestPart(value = "foto", required = false) MultipartFile foto) {
try { try {
Recurso nuevoRecurso = mapper.entity(recurso); String fotoUrl = null;
// Verificar tipo de archivo (solo imágenes)
if (foto != null && !foto.isEmpty()) {
String mimeType = foto.getContentType();
if (mimeType == null || (!mimeType.equals("image/jpeg") && !mimeType.equals("image/png"))) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Solo se permiten imágenes JPEG o PNG.");
}
// Renombrar el archivo con un nombre único
String fileName = UUID.randomUUID().toString() + "_" + foto.getOriginalFilename();
Path uploadsPath = Paths.get("uploads/");
// Crear directorio si no existe
if (!Files.exists(uploadsPath)) {
Files.createDirectories(uploadsPath);
}
// Guardar la imagen en la carpeta uploads/
Path filePath = uploadsPath.resolve(fileName);
Files.copy(foto.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING);
// Crear la URL completa de la imagen
String urlBase = "http://localhost:8080";
fotoUrl = urlBase + "/uploads/" + fileName.replace(" ", "_");
}
// Crear el recurso con la imagen (si hay)
Recurso nuevoRecurso = new Recurso(
recursoDTO.getTitulo(),
recursoDTO.getDescripcion(),
recursoDTO.getFechaPublicacion(),
recursoDTO.getAutor(),
fotoUrl
);
servicioRecursos.crearRecurso(nuevoRecurso); servicioRecursos.crearRecurso(nuevoRecurso);
return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (SecurityException e) { return ResponseEntity.status(HttpStatus.CREATED).body("Recurso creado correctamente");
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error al subir la imagen");
} }
} }
@GetMapping("/titulo/{titulo}") @GetMapping("/titulo/{titulo}")
public ResponseEntity<List<DTORecurso>> buscarPorTitulo(@PathVariable String titulo) { public ResponseEntity<List<DTORecurso>> buscarPorTitulo(@PathVariable String titulo) {
try { try {
...@@ -110,16 +168,36 @@ public class RecursosController { ...@@ -110,16 +168,36 @@ public class RecursosController {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ResponseEntity<Void> borrarRecurso(@PathVariable Long id) { public ResponseEntity<Void> borrarRecurso(@PathVariable Long id) {
try { try {
// Buscar el recurso por ID
Recurso recurso = servicioRecursos.buscarRecursoPorId(id); Recurso recurso = servicioRecursos.buscarRecursoPorId(id);
if (recurso == null) { if (recurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} }
// Verificar si el recurso tiene una imagen asociada
if (recurso.getFotoUrl() != null && !recurso.getFotoUrl().isEmpty()) {
Path imagePath = Paths.get("uploads/", recurso.getFotoUrl().replace("/uploads/", ""));
// Eliminar la imagen asociada si existe
if (Files.exists(imagePath)) {
try {
Files.delete(imagePath); // Eliminar la imagen
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}
// Eliminar el recurso de la base de datos
servicioRecursos.borrarRecurso(id); servicioRecursos.borrarRecurso(id);
// Responder con éxito
return ResponseEntity.noContent().build(); return ResponseEntity.noContent().build();
} catch (SecurityException e) { } catch (SecurityException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); // En caso de que el usuario no tenga permiso
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); // Error inesperado
} }
} }
...@@ -128,7 +206,6 @@ public class RecursosController { ...@@ -128,7 +206,6 @@ public class RecursosController {
try { try {
Recurso nuevosDatos = mapper.entity(dtoRecurso); Recurso nuevosDatos = mapper.entity(dtoRecurso);
Recurso recursoModificado = servicioRecursos.modificarRecurso(id, nuevosDatos); Recurso recursoModificado = servicioRecursos.modificarRecurso(id, nuevosDatos);
return ResponseEntity.ok(mapper.dto(recursoModificado)); return ResponseEntity.ok(mapper.dto(recursoModificado));
} catch (RecursoNoExiste e) { } catch (RecursoNoExiste e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
...@@ -139,6 +216,7 @@ public class RecursosController { ...@@ -139,6 +216,7 @@ public class RecursosController {
} }
} }
@GetMapping @GetMapping
public ResponseEntity<List<DTORecurso>> obtenerRecursos() { public ResponseEntity<List<DTORecurso>> obtenerRecursos() {
try { try {
......
...@@ -40,7 +40,7 @@ public class TestServicioBibliotecaPersonal { ...@@ -40,7 +40,7 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// Creo un recurso // Creo un recurso
Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga de prueba").getFirst(); Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga de prueba").getFirst();
...@@ -61,8 +61,8 @@ public class TestServicioBibliotecaPersonal { ...@@ -61,8 +61,8 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// Creo unos cuantos recursos de prueba // Creo unos cuantos recursos de prueba
Recurso recurso1 = new Recurso("Manga Acción", "Sinopsis 1", LocalDate.now(), "Autor A"); Recurso recurso1 = new Recurso("Manga Acción", "Sinopsis 1", LocalDate.now(), "Autor A", "");
Recurso recurso2 = new Recurso("Manga Romance", "Sinopsis 2", LocalDate.now(), "Autor B"); Recurso recurso2 = new Recurso("Manga Romance", "Sinopsis 2", LocalDate.now(), "Autor B", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -90,7 +90,7 @@ public class TestServicioBibliotecaPersonal { ...@@ -90,7 +90,7 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// Creo un recurso // Creo un recurso
Recurso recurso = new Recurso("Manga Prueba", "Descripción", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Manga Prueba", "Descripción", LocalDate.now(), "Autor", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba").getFirst(); Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba").getFirst();
...@@ -114,7 +114,7 @@ public class TestServicioBibliotecaPersonal { ...@@ -114,7 +114,7 @@ public class TestServicioBibliotecaPersonal {
servicioUsuarios.crearUsuario(usuario); servicioUsuarios.crearUsuario(usuario);
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
Recurso recurso = new Recurso("Manga Cambio", "Otra Descripción", LocalDate.now(), "AutorX"); Recurso recurso = new Recurso("Manga Cambio", "Otra Descripción", LocalDate.now(), "AutorX", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Cambio").getFirst(); Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Cambio").getFirst();
servicioBibliotecaPersonal.anadirRecursoBiblioteca(bibliotecaPersonal, recursoGuardado, Categoria.PENDIENTE); servicioBibliotecaPersonal.anadirRecursoBiblioteca(bibliotecaPersonal, recursoGuardado, Categoria.PENDIENTE);
......
...@@ -32,7 +32,7 @@ public class TestServicioRecursos { ...@@ -32,7 +32,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testCrearRecurso() { void testCrearRecurso() {
// Crear recurso de prueba // Crear recurso de prueba
Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba"); Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba", "");
servicioRecursos.crearRecurso(nuevoRecurso); servicioRecursos.crearRecurso(nuevoRecurso);
// Buscar el recurso en la base de datos después de crearlo // Buscar el recurso en la base de datos después de crearlo
...@@ -53,8 +53,8 @@ public class TestServicioRecursos { ...@@ -53,8 +53,8 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorTitulo() { void testBuscarRecursoPorTitulo() {
// Crear recursos de prueba // Crear recursos de prueba
Recurso recurso1 = new Recurso("Titulo Uno", "Descripción de prueba 1", LocalDate.now(), "Autor 1"); Recurso recurso1 = new Recurso("Titulo Uno", "Descripción de prueba 1", LocalDate.now(), "Autor 1", "");
Recurso recurso2 = new Recurso("Titulo Dos", "Descripción de prueba 2", LocalDate.now(), "Autor 2"); Recurso recurso2 = new Recurso("Titulo Dos", "Descripción de prueba 2", LocalDate.now(), "Autor 2", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -71,8 +71,8 @@ public class TestServicioRecursos { ...@@ -71,8 +71,8 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorAutor() { void testBuscarRecursoPorAutor() {
// Crear recursos con diferentes autores // Crear recursos con diferentes autores
Recurso recurso1 = new Recurso("Titulo Uno", "Desc 1", LocalDate.now(), "Autor A"); Recurso recurso1 = new Recurso("Titulo Uno", "Desc 1", LocalDate.now(), "Autor A", "");
Recurso recurso2 = new Recurso("Titulo Dos", "Desc 2", LocalDate.now(), "Autor B"); Recurso recurso2 = new Recurso("Titulo Dos", "Desc 2", LocalDate.now(), "Autor B", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -89,10 +89,10 @@ public class TestServicioRecursos { ...@@ -89,10 +89,10 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorGenero() { void testBuscarRecursoPorGenero() {
// Crear recursos con diferentes géneros // Crear recursos con diferentes géneros
Recurso recurso1 = new Recurso("Manga A", "Desc", LocalDate.now(), "Autor X"); Recurso recurso1 = new Recurso("Manga A", "Desc", LocalDate.now(), "Autor X", "");
recurso1.getGeneros().add(Genero.ACCION); recurso1.getGeneros().add(Genero.ACCION);
Recurso recurso2 = new Recurso("Manga B", "Desc", LocalDate.now(), "Autor Y"); Recurso recurso2 = new Recurso("Manga B", "Desc", LocalDate.now(), "Autor Y", "");
recurso2.getGeneros().add(Genero.ROMANCE); recurso2.getGeneros().add(Genero.ROMANCE);
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
...@@ -115,9 +115,9 @@ public class TestServicioRecursos { ...@@ -115,9 +115,9 @@ public class TestServicioRecursos {
LocalDate fecha2 = LocalDate.of(2022, 6, 15); LocalDate fecha2 = LocalDate.of(2022, 6, 15);
LocalDate fecha3 = LocalDate.of(2023, 12, 25); LocalDate fecha3 = LocalDate.of(2023, 12, 25);
Recurso recurso1 = new Recurso("Titulo A", "Desc", fecha1, "Autor X"); Recurso recurso1 = new Recurso("Titulo A", "Desc", fecha1, "Autor X", "");
Recurso recurso2 = new Recurso("Titulo B", "Desc", fecha2, "Autor Y"); Recurso recurso2 = new Recurso("Titulo B", "Desc", fecha2, "Autor Y", "");
Recurso recurso3 = new Recurso("Titulo C", "Desc", fecha3, "Autor Z"); Recurso recurso3 = new Recurso("Titulo C", "Desc", fecha3, "Autor Z", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -135,7 +135,7 @@ public class TestServicioRecursos { ...@@ -135,7 +135,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorId() { void testBuscarRecursoPorId() {
// Crear un recurso de prueba // Crear un recurso de prueba
Recurso recurso = new Recurso("Manga Prueba", "Descripción de prueba", LocalDate.now(), "Autor X"); Recurso recurso = new Recurso("Manga Prueba", "Descripción de prueba", LocalDate.now(), "Autor X", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
// Buscar el recurso en la base de datos // Buscar el recurso en la base de datos
...@@ -153,7 +153,7 @@ public class TestServicioRecursos { ...@@ -153,7 +153,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBorrarRecurso() { void testBorrarRecurso() {
// Crear recurso en la base de datos // Crear recurso en la base de datos
Recurso recurso = new Recurso("Titulo", "Descripcion", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Titulo", "Descripcion", LocalDate.now(), "Autor", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
// Buscar el recurso creado y asegurar que tiene un ID // Buscar el recurso creado y asegurar que tiene un ID
...@@ -176,7 +176,7 @@ public class TestServicioRecursos { ...@@ -176,7 +176,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testModificarRecurso() { void testModificarRecurso() {
// Crear un recurso inicial // Crear un recurso inicial
Recurso recursoOriginal = new Recurso("Titulo 1", "Descripción 1", LocalDate.of(2022, 5, 10), "Autor 1"); Recurso recursoOriginal = new Recurso("Titulo 1", "Descripción 1", LocalDate.of(2022, 5, 10), "Autor 1", "");
servicioRecursos.crearRecurso(recursoOriginal); servicioRecursos.crearRecurso(recursoOriginal);
// Buscar el recurso creado para obtener su ID // Buscar el recurso creado para obtener su ID
...@@ -188,7 +188,7 @@ public class TestServicioRecursos { ...@@ -188,7 +188,7 @@ public class TestServicioRecursos {
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// Crear un objeto con algunos campos en null (solo modificamos la descripción) // Crear un objeto con algunos campos en null (solo modificamos la descripción)
Recurso nuevosDatos = new Recurso(null, "Descripción Modificada", null, null); Recurso nuevosDatos = new Recurso(null, "Descripción Modificada", null, null, "");
// Modificar el recurso // Modificar el recurso
Recurso recursoModificado = servicioRecursos.modificarRecurso(recursoId, nuevosDatos); Recurso recursoModificado = servicioRecursos.modificarRecurso(recursoId, nuevosDatos);
...@@ -214,7 +214,7 @@ public class TestServicioRecursos { ...@@ -214,7 +214,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testAnadirCapitulo() { void testAnadirCapitulo() {
// Creo recurso inicial // Creo recurso inicial
Recurso recurso = new Recurso("Manga Ejemplo", "Sinopsis", LocalDate.now(), "Autor X"); Recurso recurso = new Recurso("Manga Ejemplo", "Sinopsis", LocalDate.now(), "Autor X", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Ejemplo"); List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Ejemplo");
assertThat(recursos).isNotEmpty(); assertThat(recursos).isNotEmpty();
...@@ -255,7 +255,7 @@ public class TestServicioRecursos { ...@@ -255,7 +255,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testObtenerCapitulosDeRecurso() { void testObtenerCapitulosDeRecurso() {
// Creo un recurso // Creo un recurso
Recurso recurso = new Recurso("Manga Prueba", "Sinopsis", LocalDate.now(), "Autor X"); Recurso recurso = new Recurso("Manga Prueba", "Sinopsis", LocalDate.now(), "Autor X", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba"); List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba");
assertThat(recursos).isNotEmpty(); assertThat(recursos).isNotEmpty();
......
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