ApiExceptionHandler.java
package com.edtech.controller;
import com.edtech.dto.ErrorResponse;
import com.edtech.service.DuplicateEmailException;
import com.edtech.service.InvalidCredentialsException;
import com.edtech.service.InvalidInstitutionalEmailException;
import jakarta.validation.ConstraintViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/** Documentação para ApiExceptionHandler. */
@RestControllerAdvice
public class ApiExceptionHandler {
@ExceptionHandler(DuplicateEmailException.class)
public ResponseEntity<ErrorResponse> handleDuplicateEmail(DuplicateEmailException exception) {
return ResponseEntity.status(HttpStatus.CONFLICT)
.body(new ErrorResponse("email_already_registered", exception.getMessage()));
}
@ExceptionHandler(InvalidInstitutionalEmailException.class)
public ResponseEntity<ErrorResponse> handleInvalidInstitutionalEmail(
InvalidInstitutionalEmailException exception) {
return ResponseEntity.badRequest()
.body(new ErrorResponse("invalid_institutional_email", exception.getMessage()));
}
@ExceptionHandler(InvalidCredentialsException.class)
public ResponseEntity<ErrorResponse> handleInvalidCredentials() {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
.body(new ErrorResponse("invalid_credentials", "Credenciais inválidas."));
}
@ExceptionHandler({MethodArgumentNotValidException.class, ConstraintViolationException.class})
public ResponseEntity<ErrorResponse> handleValidationException(Exception exception) {
return ResponseEntity.badRequest()
.body(new ErrorResponse("invalid_request", "Verifique os dados enviados."));
}
/** Javadoc. */
@ExceptionHandler(org.springframework.dao.DataIntegrityViolationException.class)
public ResponseEntity<ErrorResponse> handleDataIntegrityViolation(
org.springframework.dao.DataIntegrityViolationException exception) {
return ResponseEntity.status(HttpStatus.CONFLICT)
.body(
new ErrorResponse(
"email_already_registered", "Conflito de dados. Verifique unicidade."));
}
}