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;
import java.util.Collections;
import java.util.List;
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
@RequestMapping("/recursos")
......@@ -28,17 +43,60 @@ public class RecursosController {
@Autowired
private Mapper mapper;
@PostMapping("/")
public ResponseEntity<String> crearRecurso(@RequestBody DTORecurso recurso) {
@PostMapping(value = "/", consumes = {"multipart/form-data"})
public ResponseEntity<String> crearRecurso(
@RequestPart("recurso") DTORecurso recursoDTO,
@RequestPart(value = "foto", required = false) MultipartFile foto) {
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);
return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (SecurityException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
return ResponseEntity.status(HttpStatus.CREATED).body("Recurso creado correctamente");
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error al subir la imagen");
}
}
@GetMapping("/titulo/{titulo}")
public ResponseEntity<List<DTORecurso>> buscarPorTitulo(@PathVariable String titulo) {
try {
......@@ -110,16 +168,36 @@ public class RecursosController {
@DeleteMapping("/{id}")
public ResponseEntity<Void> borrarRecurso(@PathVariable Long id) {
try {
// Buscar el recurso por ID
Recurso recurso = servicioRecursos.buscarRecursoPorId(id);
if (recurso == null) {
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);
// Responder con éxito
return ResponseEntity.noContent().build();
} 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) {
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 {
try {
Recurso nuevosDatos = mapper.entity(dtoRecurso);
Recurso recursoModificado = servicioRecursos.modificarRecurso(id, nuevosDatos);
return ResponseEntity.ok(mapper.dto(recursoModificado));
} catch (RecursoNoExiste e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
......@@ -139,6 +216,7 @@ public class RecursosController {
}
}
@GetMapping
public ResponseEntity<List<DTORecurso>> obtenerRecursos() {
try {
......
......@@ -40,7 +40,7 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// 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);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga de prueba").getFirst();
......@@ -61,8 +61,8 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// Creo unos cuantos recursos de prueba
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 recurso1 = new Recurso("Manga Acción", "Sinopsis 1", LocalDate.now(), "Autor A", "");
Recurso recurso2 = new Recurso("Manga Romance", "Sinopsis 2", LocalDate.now(), "Autor B", "");
servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2);
......@@ -90,7 +90,7 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// 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);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba").getFirst();
......@@ -114,7 +114,7 @@ public class TestServicioBibliotecaPersonal {
servicioUsuarios.crearUsuario(usuario);
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);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Cambio").getFirst();
servicioBibliotecaPersonal.anadirRecursoBiblioteca(bibliotecaPersonal, recursoGuardado, Categoria.PENDIENTE);
......
......@@ -32,7 +32,7 @@ public class TestServicioRecursos {
@DirtiesContext
void testCrearRecurso() {
// 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);
// Buscar el recurso en la base de datos después de crearlo
......@@ -53,8 +53,8 @@ public class TestServicioRecursos {
@DirtiesContext
void testBuscarRecursoPorTitulo() {
// Crear recursos de prueba
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 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", "");
servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2);
......@@ -71,8 +71,8 @@ public class TestServicioRecursos {
@DirtiesContext
void testBuscarRecursoPorAutor() {
// Crear recursos con diferentes autores
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 recurso1 = new Recurso("Titulo Uno", "Desc 1", LocalDate.now(), "Autor A", "");
Recurso recurso2 = new Recurso("Titulo Dos", "Desc 2", LocalDate.now(), "Autor B", "");
servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2);
......@@ -89,10 +89,10 @@ public class TestServicioRecursos {
@DirtiesContext
void testBuscarRecursoPorGenero() {
// 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);
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);
servicioRecursos.crearRecurso(recurso1);
......@@ -115,9 +115,9 @@ public class TestServicioRecursos {
LocalDate fecha2 = LocalDate.of(2022, 6, 15);
LocalDate fecha3 = LocalDate.of(2023, 12, 25);
Recurso recurso1 = new Recurso("Titulo A", "Desc", fecha1, "Autor X");
Recurso recurso2 = new Recurso("Titulo B", "Desc", fecha2, "Autor Y");
Recurso recurso3 = new Recurso("Titulo C", "Desc", fecha3, "Autor Z");
Recurso recurso1 = new Recurso("Titulo A", "Desc", fecha1, "Autor X", "");
Recurso recurso2 = new Recurso("Titulo B", "Desc", fecha2, "Autor Y", "");
Recurso recurso3 = new Recurso("Titulo C", "Desc", fecha3, "Autor Z", "");
servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2);
......@@ -135,7 +135,7 @@ public class TestServicioRecursos {
@DirtiesContext
void testBuscarRecursoPorId() {
// 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);
// Buscar el recurso en la base de datos
......@@ -153,7 +153,7 @@ public class TestServicioRecursos {
@DirtiesContext
void testBorrarRecurso() {
// 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);
// Buscar el recurso creado y asegurar que tiene un ID
......@@ -176,7 +176,7 @@ public class TestServicioRecursos {
@DirtiesContext
void testModificarRecurso() {
// 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);
// Buscar el recurso creado para obtener su ID
......@@ -188,7 +188,7 @@ public class TestServicioRecursos {
assertThat(recursoId).isNotNull();
// 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
Recurso recursoModificado = servicioRecursos.modificarRecurso(recursoId, nuevosDatos);
......@@ -214,7 +214,7 @@ public class TestServicioRecursos {
@DirtiesContext
void testAnadirCapitulo() {
// 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);
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Ejemplo");
assertThat(recursos).isNotEmpty();
......@@ -255,7 +255,7 @@ public class TestServicioRecursos {
@DirtiesContext
void testObtenerCapitulosDeRecurso() {
// 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);
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba");
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