From 6797a47df56ad2ec59817e0951deac1e649d342e Mon Sep 17 00:00:00 2001 From: vladp Date: Tue, 16 Dec 2025 16:43:20 +0700 Subject: [PATCH] check unique phone --- src/main/java/ru/soune/nocopy/dto/MessageCode.java | 1 + src/main/java/ru/soune/nocopy/entity/User.java | 1 + .../ru/soune/nocopy/handler/RegRequestHandler.java | 10 ++++++---- .../ru/soune/nocopy/repository/UserRepository.java | 2 ++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/dto/MessageCode.java b/src/main/java/ru/soune/nocopy/dto/MessageCode.java index e5fd6e4..baa48be 100644 --- a/src/main/java/ru/soune/nocopy/dto/MessageCode.java +++ b/src/main/java/ru/soune/nocopy/dto/MessageCode.java @@ -3,6 +3,7 @@ package ru.soune.nocopy.dto; public enum MessageCode { SUCCESS(0, "Operation successful"), REG_EMAIL_EXISTS(1, "Email already registered"), + REG_EMAIL_OR_PHONE_EXISTS(1, "Email or phone already registered"), INVALID_FIELD(2, "Invalid field"), INVALID_JSON_BODY(2, "Invalid fields in JSON object"), MSG_ID_NOT_FOUND(4, "Message id not found"), diff --git a/src/main/java/ru/soune/nocopy/entity/User.java b/src/main/java/ru/soune/nocopy/entity/User.java index a4fba7d..0841027 100644 --- a/src/main/java/ru/soune/nocopy/entity/User.java +++ b/src/main/java/ru/soune/nocopy/entity/User.java @@ -42,6 +42,7 @@ public class User { private String password; @Size(min = 11, max = 14) + @Column(unique = true) private String phone; @Enumerated(EnumType.STRING) diff --git a/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java b/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java index 65bc887..349f0a7 100644 --- a/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java @@ -33,13 +33,15 @@ public class RegRequestHandler implements RequestHandler { public BaseResponse handle(BaseRequest request) throws ValidationException { RegRequest regRequest = objectMapper.convertValue(request.getMessageBody(), RegRequest.class); - if (userRepository.existsByEmail(regRequest.getEmail())) { + if (userRepository.existsByEmail(regRequest.getEmail()) || userRepository.existsByPhone(regRequest.getPhone())) { RegAnswer regAnswer = new RegAnswer(); regAnswer.setFieldErrors(Arrays.asList(Map.of("email", regRequest.getEmail()))); + regAnswer.setFieldErrors(Arrays.asList(Map.of("phone", regRequest.getPhone()))); - throw new NotValidFieldException("User already exists with email: " + regRequest.getEmail(), - new BaseResponse(request.getMsgId(), MessageCode.REG_EMAIL_EXISTS.getCode(), - MessageCode.REG_EMAIL_EXISTS.getDescription(), regAnswer)); + throw new NotValidFieldException("User already exists with email:" + regRequest.getEmail() + " or phone: " + + regRequest.getPhone(), new BaseResponse(request.getMsgId(), + MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getCode(), + MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getDescription(), regAnswer)); } BindingResult bindingResult = new BeanPropertyBindingResult(regRequest, "regRequest"); diff --git a/src/main/java/ru/soune/nocopy/repository/UserRepository.java b/src/main/java/ru/soune/nocopy/repository/UserRepository.java index da4d7f9..f674629 100644 --- a/src/main/java/ru/soune/nocopy/repository/UserRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/UserRepository.java @@ -1,5 +1,6 @@ package ru.soune.nocopy.repository; +import jakarta.validation.constraints.Size; import org.springframework.data.jpa.repository.JpaRepository; import ru.soune.nocopy.entity.User; @@ -8,4 +9,5 @@ import java.util.Optional; public interface UserRepository extends JpaRepository { Optional findByEmail(String email); boolean existsByEmail(String email); + boolean existsByPhone(@Size(min = 11, max = 14) String phone); }