diff --git a/src/main/java/ru/soune/nocopy/exception/CompanyAlreadyExist.java b/src/main/java/ru/soune/nocopy/exception/CompanyAlreadyExist.java new file mode 100644 index 0000000..80f3775 --- /dev/null +++ b/src/main/java/ru/soune/nocopy/exception/CompanyAlreadyExist.java @@ -0,0 +1,7 @@ +package ru.soune.nocopy.exception; + +public class CompanyAlreadyExist extends RuntimeException { + public CompanyAlreadyExist(String message) { + super(message); + } +} diff --git a/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java b/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java index e3aad4e..6e60a96 100644 --- a/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/RegRequestHandler.java @@ -13,6 +13,7 @@ import ru.soune.nocopy.dto.register.RegRequest; import ru.soune.nocopy.entity.referral.Referral; import ru.soune.nocopy.entity.user.AuthToken; import ru.soune.nocopy.entity.user.EmailVerificationToken; +import ru.soune.nocopy.exception.CompanyAlreadyExist; import ru.soune.nocopy.exception.NotValidFieldException; import ru.soune.nocopy.exception.ValidationException; import ru.soune.nocopy.handler.validator.RegRequestValidator; @@ -45,84 +46,91 @@ public class RegRequestHandler implements RequestHandler { @Override public BaseResponse handle(BaseRequest request) throws ValidationException { RegRequest regRequest = objectMapper.convertValue(request.getMessageBody(), RegRequest.class); + try { + 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()))); - if (userRepository.existsByEmail(regRequest.getEmail()) || userRepository.existsByPhone(regRequest.getPhone())) { + 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)); + } + + String referralLink = regRequest.getReferralLink(); + String mailVerified = regRequest.getMailVerified(); + + if (referralLink != null) { + Referral referral = referralJpaRepository.findByReferralLink(referralLink); + if (referral == null) { + throw new NotValidFieldException("Referral link is not found:" + referralLink + + referralLink, new BaseResponse(request.getMsgId(), + MessageCode.REFERRAL_LINK_IS_NOT_EXIST.getCode(), + MessageCode.REFERRAL_LINK_IS_NOT_EXIST.getDescription(), Map.of( + "referralLink", referralLink))); + } + + if (mailVerified == null) { + throw new NotValidFieldException("Mailverified is null:" + referralLink + + referralLink, new BaseResponse(request.getMsgId(), + MessageCode.MAIL_VERIFIED_NULL.getCode(), + MessageCode.MAIL_VERIFIED_NULL.getDescription(), Map.of( + "mailVerified", mailVerified))); + } + } + + BindingResult bindingResult = new BeanPropertyBindingResult(regRequest, "regRequest"); + + regRequestValidator.validate(regRequest, bindingResult); + + if (bindingResult.hasErrors()) { + throw new ValidationException(bindingResult, request.getMsgId()); + } + + boolean verified = mailVerified.equals("true"); + + AuthToken authToken = authService.register(regRequest, verified); + EmailVerificationToken emailToken = emailService.createEmailVerificationToken(authToken); 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() + " or phone: " + - regRequest.getPhone(), new BaseResponse(request.getMsgId(), - MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getCode(), - MessageCode.REG_EMAIL_OR_PHONE_EXISTS.getDescription(), regAnswer)); - } + if (verified) { + try { + emailService.sendVerificationEmail(authToken.getUser(), emailToken.getToken()); + } catch (Exception e) { + return new BaseResponse(request.getMsgId(), MessageCode.SEND_EMAIL_EXCEPTION.getCode(), + MessageCode.SEND_EMAIL_EXCEPTION.getDescription(), Map.of( + "message", "not send", + "email", regRequest.getEmail() + )); + } - String referralLink = regRequest.getReferralLink(); - String mailVerified = regRequest.getMailVerified(); + regAnswer.setVerified(false); + regAnswer.setActive(false); + } else { + regAnswer.setUserId(authToken.getUser().getId()); - if (referralLink != null) { - Referral referral = referralJpaRepository.findByReferralLink(referralLink); - if (referral == null) { - throw new NotValidFieldException("Referral link is not found:" + referralLink + - referralLink, new BaseResponse(request.getMsgId(), - MessageCode.REFERRAL_LINK_IS_NOT_EXIST.getCode(), - MessageCode.REFERRAL_LINK_IS_NOT_EXIST.getDescription(), Map.of( - "referralLink", referralLink))); + regAnswer.setVerified(true); + regAnswer.setActive(true); } - if (mailVerified == null) { - throw new NotValidFieldException("Mailverified is null:" + referralLink + - referralLink, new BaseResponse(request.getMsgId(), - MessageCode.MAIL_VERIFIED_NULL.getCode(), - MessageCode.MAIL_VERIFIED_NULL.getDescription(), Map.of( - "mailVerified", mailVerified))); - } - } + String token = authToken.getToken(); + authService.useUserAuthToken(token); - BindingResult bindingResult = new BeanPropertyBindingResult(regRequest, "regRequest"); - - regRequestValidator.validate(regRequest, bindingResult); - - if (bindingResult.hasErrors()) { - throw new ValidationException(bindingResult, request.getMsgId()); - } - - boolean verified = mailVerified.equals("true"); - AuthToken authToken = authService.register(regRequest, verified); - EmailVerificationToken emailToken = emailService.createEmailVerificationToken(authToken); - RegAnswer regAnswer = new RegAnswer(); - - if (verified) { - try { - emailService.sendVerificationEmail(authToken.getUser(), emailToken.getToken()); - } catch (Exception e) { - return new BaseResponse(request.getMsgId(), MessageCode.SEND_EMAIL_EXCEPTION.getCode(), - MessageCode.SEND_EMAIL_EXCEPTION.getDescription(), Map.of( - "message", "not send", - "email", regRequest.getEmail() - )); - } - - regAnswer.setVerified(false); - regAnswer.setActive(false); - } else { + regAnswer.setToken(token); regAnswer.setUserId(authToken.getUser().getId()); - regAnswer.setVerified(true); - regAnswer.setActive(true); + if (regRequest.getAccountType().equals("b2c")) { + referralService.onRegister(authToken.getUser().getId(), regRequest.getReferralLink()); + } + + return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), + MessageCode.SUCCESS.getDescription(), regAnswer); + + } catch (CompanyAlreadyExist e) { + return new BaseResponse(request.getMsgId(), MessageCode.COMPANY_ALREADY_EXISTS.getCode(), + MessageCode.COMPANY_ALREADY_EXISTS.getDescription(), Map.of( + "inn", regRequest.getInn())); } - - String token = authToken.getToken(); - authService.useUserAuthToken(token); - - regAnswer.setToken(token); - regAnswer.setUserId(authToken.getUser().getId()); - - if (regRequest.getAccountType().equals("b2c")) { - referralService.onRegister(authToken.getUser().getId(), regRequest.getReferralLink()); - } - - return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), - MessageCode.SUCCESS.getDescription(), regAnswer); } } \ No newline at end of file diff --git a/src/main/java/ru/soune/nocopy/service/register/AuthService.java b/src/main/java/ru/soune/nocopy/service/register/AuthService.java index 576ced2..a8dc32c 100644 --- a/src/main/java/ru/soune/nocopy/service/register/AuthService.java +++ b/src/main/java/ru/soune/nocopy/service/register/AuthService.java @@ -17,6 +17,7 @@ import ru.soune.nocopy.entity.user.AuthToken; import ru.soune.nocopy.entity.user.Permission; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.entity.user.UserNotActive; +import ru.soune.nocopy.exception.CompanyAlreadyExist; import ru.soune.nocopy.exception.NotFoundAuthToken; import ru.soune.nocopy.exception.NotValidFieldException; import ru.soune.nocopy.repository.*; @@ -61,7 +62,11 @@ public class AuthService { AccountType accountType = AccountType.valueOf(registerRequest.getAccountType().toUpperCase()); if (accountType == AccountType.B2B && registerRequest.getCompanyName() != null) { - createCompanyAccount(registerRequest, user); + try { + createCompanyAccount(registerRequest, user); + } catch (CompanyAlreadyExist exist) { + throw new CompanyAlreadyExist("Company already exist"); + } } else if (accountType == AccountType.B2C && registerRequest.getCompanyName() == null) { createIndividualAccount(user); } else { @@ -173,7 +178,7 @@ public class AuthService { Optional byInn = companyRepository.findByInn(request.getInn()); if (byInn.isPresent()) { - throw new IllegalStateException("Company was already created"); + throw new CompanyAlreadyExist("Company was already created"); } Company company = new Company();