Commit 1305bf86 by Rubén Ramírez

feat: [RecursosController]: Implementadas las funciones para las búsquedas por…

feat: [RecursosController]: Implementadas las funciones para las búsquedas por id y borrar el recurso en el controlador
parent 6836f43d
......@@ -2,6 +2,7 @@ package com.ujaen.tfg.mangaffinity.rest;
import com.ujaen.tfg.mangaffinity.entidades.Genero;
import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.excepciones.RecursoNoExiste;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.Mapper;
import com.ujaen.tfg.mangaffinity.servicios.ServicioRecursos;
......@@ -38,40 +39,89 @@ public class RecursosController {
@GetMapping("/titulo/{titulo}")
public ResponseEntity<List<DTORecurso>> buscarPorTitulo(@PathVariable String titulo) {
try {
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo(titulo);
if (recursos.isEmpty()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Collections.emptyList());
}
return ResponseEntity.ok(recursos.stream().map(mapper::dto).toList());
List<DTORecurso> dtoRecursos = recursos.stream().map(mapper::dto).toList();
return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
@GetMapping("/genero/{genero}")
public ResponseEntity<List<DTORecurso>> buscarPorGenero(@PathVariable Genero genero) {
try {
List<Recurso> recursos = servicioRecursos.buscarRecursoPorGenero(genero);
if (recursos.isEmpty()) {
return ResponseEntity.ok(Collections.emptyList()); // ✅ Devuelve []
List<DTORecurso> dtoRecursos = recursos.stream().map(mapper::dto).toList();
return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
return ResponseEntity.ok(recursos.stream().map(mapper::dto).toList());
}
@GetMapping("/fecha")
public ResponseEntity<List<DTORecurso>> buscarPorRangoFechas(@RequestParam LocalDate inicio, @RequestParam LocalDate fin) {
try {
List<Recurso> recursos = servicioRecursos.buscarRecursoPorRangoFechas(inicio, fin);
if (recursos.isEmpty()) {
return ResponseEntity.ok(Collections.emptyList()); // ✅ Devuelve []
List<DTORecurso> dtoRecursos = recursos.stream().map(mapper::dto).toList();
return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
return ResponseEntity.ok(recursos.stream().map(mapper::dto).toList());
}
@GetMapping("/autor/{autor}")
public ResponseEntity<List<DTORecurso>> buscarPorAutor(@PathVariable String autor) {
try {
List<Recurso> recursos = servicioRecursos.buscarRecursoPorAutor(autor);
if (recursos.isEmpty()) {
return ResponseEntity.ok(Collections.emptyList()); // ✅ Devuelve []
List<DTORecurso> dtoRecursos = recursos.stream().map(mapper::dto).toList();
return ResponseEntity.ok(dtoRecursos);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
@GetMapping("/{id}")
public ResponseEntity<DTORecurso> buscarRecursoPorId(@PathVariable Long id) {
try {
Recurso recurso = servicioRecursos.buscarRecursoPorId(id);
if (recurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
return ResponseEntity.ok(recursos.stream().map(mapper::dto).toList());
return ResponseEntity.ok(mapper.dto(recurso));
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> borrarRecurso(@PathVariable Long id) {
try {
Recurso recurso = servicioRecursos.buscarRecursoPorId(id);
if (recurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
servicioRecursos.borrarRecurso(id);
return ResponseEntity.noContent().build();
} catch (SecurityException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}
\ No newline at end of file
......@@ -30,19 +30,19 @@ public class ServicioSeguridad {
.authorizeHttpRequests(request -> request
.requestMatchers(HttpMethod.POST, "/usuarios/{email}").permitAll()
.requestMatchers(HttpMethod.POST, "/usuarios/").permitAll()
.requestMatchers(HttpMethod.GET, "/recursos/titulo/**").permitAll() // 🔓 Permitir búsquedas
.requestMatchers(HttpMethod.GET, "/recursos/titulo/**").permitAll()
.requestMatchers(HttpMethod.GET, "/recursos/autor/**").permitAll()
.requestMatchers(HttpMethod.GET, "/recursos/genero/**").permitAll()
.requestMatchers(HttpMethod.GET, "/recursos/fecha").permitAll()
.requestMatchers(HttpMethod.POST, "/recursos/").hasAuthority("ROLE_ADMIN") // <--- Aquí usamos ROLE_ADMIN
.requestMatchers(HttpMethod.GET, "/recursos/{id}").permitAll() // ✅ Nueva ruta para buscar por ID
.requestMatchers(HttpMethod.POST, "/recursos/").hasAuthority("ROLE_ADMIN")
.requestMatchers(HttpMethod.DELETE, "/recursos/{id}").hasAuthority("ROLE_ADMIN") // ✅ Solo admins pueden borrar
.anyRequest().authenticated()
)
.addFilterBefore(new JwtFilter(jwtUtil), UsernamePasswordAuthenticationFilter.class)
.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
......
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