check unique phone
Test Workflow / test (push) Successful in 3s

This commit is contained in:
vladp
2025-12-16 16:43:20 +07:00
parent fade754c7c
commit 6797a47df5
4 changed files with 10 additions and 4 deletions
@@ -3,6 +3,7 @@ package ru.soune.nocopy.dto;
public enum MessageCode { public enum MessageCode {
SUCCESS(0, "Operation successful"), SUCCESS(0, "Operation successful"),
REG_EMAIL_EXISTS(1, "Email already registered"), REG_EMAIL_EXISTS(1, "Email already registered"),
REG_EMAIL_OR_PHONE_EXISTS(1, "Email or phone already registered"),
INVALID_FIELD(2, "Invalid field"), INVALID_FIELD(2, "Invalid field"),
INVALID_JSON_BODY(2, "Invalid fields in JSON object"), INVALID_JSON_BODY(2, "Invalid fields in JSON object"),
MSG_ID_NOT_FOUND(4, "Message id not found"), MSG_ID_NOT_FOUND(4, "Message id not found"),
@@ -42,6 +42,7 @@ public class User {
private String password; private String password;
@Size(min = 11, max = 14) @Size(min = 11, max = 14)
@Column(unique = true)
private String phone; private String phone;
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
@@ -33,13 +33,15 @@ public class RegRequestHandler implements RequestHandler {
public BaseResponse handle(BaseRequest request) throws ValidationException { public BaseResponse handle(BaseRequest request) throws ValidationException {
RegRequest regRequest = objectMapper.convertValue(request.getMessageBody(), RegRequest.class); 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 regAnswer = new RegAnswer();
regAnswer.setFieldErrors(Arrays.asList(Map.of("email", regRequest.getEmail()))); 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(), throw new NotValidFieldException("User already exists with email:" + regRequest.getEmail() + " or phone: " +
new BaseResponse(request.getMsgId(), MessageCode.REG_EMAIL_EXISTS.getCode(), regRequest.getPhone(), new BaseResponse(request.getMsgId(),
MessageCode.REG_EMAIL_EXISTS.getDescription(), regAnswer)); MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getCode(),
MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getDescription(), regAnswer));
} }
BindingResult bindingResult = new BeanPropertyBindingResult(regRequest, "regRequest"); BindingResult bindingResult = new BeanPropertyBindingResult(regRequest, "regRequest");
@@ -1,5 +1,6 @@
package ru.soune.nocopy.repository; package ru.soune.nocopy.repository;
import jakarta.validation.constraints.Size;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import ru.soune.nocopy.entity.User; import ru.soune.nocopy.entity.User;
@@ -8,4 +9,5 @@ import java.util.Optional;
public interface UserRepository extends JpaRepository<User, Long> { public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email); Optional<User> findByEmail(String email);
boolean existsByEmail(String email); boolean existsByEmail(String email);
boolean existsByPhone(@Size(min = 11, max = 14) String phone);
} }