Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Proyecto] Hice el manejo del error de cuando se intenta registrar un medico con un email o documento ya registrados

Dado que al momento de crear la base de datos usando la primer versión de la migration se estableció que los campos email y documento son únicos (o sea que NO SE PUEDEN REPETIR), entonces si queremos registrar un nuevo médico con un email o documento ya registrados, Insomnia manda el código http 500 (Internal Server Error). Me di cuenta que ese código http no es correcto y que debería de mandar el 400 (Bad Request) entonces tomé la exception que lanza el stacktrace de la consola de IntelliJ el cual es: SQLIntegrityConstraintViolationException y creé un método que gestiona ese error en la clase GestorDeErrores:

    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public ResponseEntity<String>
    gestionarErrorEmailODocumentoYaRegistrados(SQLIntegrityConstraintViolationException exception) {
        return ResponseEntity.badRequest().body(exception.getMessage());

    }

Y como ejemplo de ejecución adjunto las siguientes imágenes:
Sin la gestión del error:

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad
Con la gestión del error:
Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad
¿Qué opinan?, compañeras y compañeros

2 respuestas
solución!

¡Hola Yahadad, espero que estés bien!

Has hecho un buen trabajo al manejar la excepción SQLIntegrityConstraintViolationException para devolver un código 400 en lugar de un 500. Esto es más apropiado ya que indica un problema con la solicitud del cliente, como un email o documento duplicado.

Para mejorar la claridad del mensaje de error, podrías personalizar la respuesta para que sea más amigable. Por ejemplo, podrías devolver un mensaje que indique específicamente que el email o el documento ya están registrados. Aquí tienes un ejemplo de cómo podrías hacerlo:

@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public ResponseEntity<String> gestionarErrorEmailODocumentoYaRegistrados(SQLIntegrityConstraintViolationException exception) {
    String mensajeAmigable = "El email o documento proporcionado ya está registrado. Por favor, utiliza uno diferente.";
    return ResponseEntity.badRequest().body(mensajeAmigable);
}

Esto proporcionará una respuesta más clara y útil para el usuario final. Espero que esta sugerencia te sea útil.

¡Espero haber ayudado y buenos estudios!

Gracias por atender mi sugerencia y por complementarla, ingeniera Brenda.