add validation to email for save user

This commit is contained in:
rayankonecny 2025-12-01 16:22:21 +00:00
parent 20e7421603
commit 619ece9a13
3 changed files with 31 additions and 2 deletions

View file

@ -1,5 +1,6 @@
package br.com.rayankonecny.userserviceapi.controller.exceptions; package br.com.rayankonecny.userserviceapi.controller.exceptions;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
@ -13,6 +14,7 @@ import main.java.models.exceptions.ResourceNotFoundException;
import main.java.models.exceptions.StandardError; import main.java.models.exceptions.StandardError;
import static java.time.LocalDateTime.now; import static java.time.LocalDateTime.now;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.NOT_FOUND; import static org.springframework.http.HttpStatus.NOT_FOUND;
import java.util.ArrayList; import java.util.ArrayList;
@ -54,4 +56,18 @@ public class ControllerExceptionHandler {
return ResponseEntity.badRequest().body(error); return ResponseEntity.badRequest().body(error);
} }
@ExceptionHandler(DataIntegrityViolationException.class)
ResponseEntity<StandardError> 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());
}
} }

View file

@ -1,10 +1,13 @@
package br.com.rayankonecny.userserviceapi.repository; 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.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import br.com.rayankonecny.userserviceapi.entity.User;
@Repository @Repository
public interface UserRepository extends MongoRepository<User, String> { public interface UserRepository extends MongoRepository<User, String> {
Optional<User> findByEmail(final String email);
} }

View file

@ -1,5 +1,6 @@
package br.com.rayankonecny.userserviceapi.service; package br.com.rayankonecny.userserviceapi.service;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import br.com.rayankonecny.userserviceapi.mapper.UserMapper; import br.com.rayankonecny.userserviceapi.mapper.UserMapper;
@ -23,7 +24,16 @@ public class UserService {
} }
public void save(CreateUserRequest createUserRequest) { public void save(CreateUserRequest createUserRequest) {
verifyIfEmailAlreadyEexists(createUserRequest.email(), null);
userRepository.save(userMapper.fromRequest(createUserRequest)); 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");
});
}
} }