From 619ece9a137146975f12837edfb8f621014c0e9e Mon Sep 17 00:00:00 2001 From: rayankonecny Date: Mon, 1 Dec 2025 16:22:21 +0000 Subject: [PATCH] add validation to email for save user --- .../exceptions/ControllerExceptionHandler.java | 16 ++++++++++++++++ .../repository/UserRepository.java | 7 +++++-- .../userserviceapi/service/UserService.java | 10 ++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/controller/exceptions/ControllerExceptionHandler.java b/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/controller/exceptions/ControllerExceptionHandler.java index 5c01d46..001eb29 100644 --- a/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/controller/exceptions/ControllerExceptionHandler.java +++ b/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/controller/exceptions/ControllerExceptionHandler.java @@ -1,5 +1,6 @@ package br.com.rayankonecny.userserviceapi.controller.exceptions; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.ResponseEntity; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; @@ -13,6 +14,7 @@ import main.java.models.exceptions.ResourceNotFoundException; import main.java.models.exceptions.StandardError; import static java.time.LocalDateTime.now; +import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.NOT_FOUND; import java.util.ArrayList; @@ -54,4 +56,18 @@ public class ControllerExceptionHandler { return ResponseEntity.badRequest().body(error); } + + @ExceptionHandler(DataIntegrityViolationException.class) + ResponseEntity handleDataIntegrityViolationException( + final DataIntegrityViolationException ex, final HttpServletRequest request) { + + return ResponseEntity.badRequest().body( + StandardError.builder() + .timestamp(now()) + .status(BAD_REQUEST.value()) + .error(BAD_REQUEST.getReasonPhrase()) + .message(ex.getMessage()) + .path(request.getRequestURI()) + .build()); + } } diff --git a/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/repository/UserRepository.java b/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/repository/UserRepository.java index 0dd7f7c..15cc87e 100644 --- a/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/repository/UserRepository.java +++ b/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/repository/UserRepository.java @@ -1,10 +1,13 @@ package br.com.rayankonecny.userserviceapi.repository; +import java.util.Optional; + +import br.com.rayankonecny.userserviceapi.entity.User; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; -import br.com.rayankonecny.userserviceapi.entity.User; - @Repository public interface UserRepository extends MongoRepository { + + Optional findByEmail(final String email); } diff --git a/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/service/UserService.java b/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/service/UserService.java index 7e0e16c..439e38f 100644 --- a/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/service/UserService.java +++ b/user-service-api/src/main/java/br/com/rayankonecny/userserviceapi/service/UserService.java @@ -1,5 +1,6 @@ package br.com.rayankonecny.userserviceapi.service; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; import br.com.rayankonecny.userserviceapi.mapper.UserMapper; @@ -23,7 +24,16 @@ public class UserService { } public void save(CreateUserRequest createUserRequest) { + verifyIfEmailAlreadyEexists(createUserRequest.email(), null); userRepository.save(userMapper.fromRequest(createUserRequest)); } + private void verifyIfEmailAlreadyEexists(final String email, final String id) { + userRepository.findByEmail(email) + .filter(user -> !user.getId().equals(id)) + .ifPresent(user -> { + throw new DataIntegrityViolationException("Email [" + email + "] already exists"); + }); + } + }