package med.voll.api.infra;
import jakarta.persistence.EntityNotFoundException;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GestorDerErrores {
/*
@ExceptionHandler me permite manejar excepciones específicas
que se lancen durante la ejecución de los controladores REST.
En este caso, estamos manejando dos tipos de excepciones:
1. EntityNotFoundException: Cuando se lanza esta excepción,
el metodo getionarError404() devuelve una respuesta HTTP 404 Not Found.
2. MethodArgumentNotValidException: Cuando se lanza esta excepción,
el metodo getionarError400() devuelve una respuesta HTTP 400 Bad Request
*/
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity getionarError404() {
return ResponseEntity.notFound().build();
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity getionarError400(MethodArgumentNotValidException ex) {
var errores = ex.getFieldErrors();
return ResponseEntity.badRequest().body(errores.stream().map(DatosErrorValidacion::new).toList());
}
public record DatosErrorValidacion(String campo, String mensaje) {
public DatosErrorValidacion(FieldError error){
this(error.getField(), error.getDefaultMessage());
}
}
}