diff --git a/src/main/java/com/onebyone/kindergarten/domain/user/entity/EmailCertification.java b/src/main/java/com/onebyone/kindergarten/domain/user/entity/EmailCertification.java index 9a18086..938bd27 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/user/entity/EmailCertification.java +++ b/src/main/java/com/onebyone/kindergarten/domain/user/entity/EmailCertification.java @@ -32,4 +32,12 @@ public void completeCertification() { this.isCertificated = true; this.updatedAt = LocalDateTime.now(); } + + public void updateCode(String code) { + this.code = code; + } + + public void markUncertificated() { + this.isCertificated = false; + } } diff --git a/src/main/java/com/onebyone/kindergarten/domain/user/repository/EmailCertificationRepository.java b/src/main/java/com/onebyone/kindergarten/domain/user/repository/EmailCertificationRepository.java index c4b6458..056fb83 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/user/repository/EmailCertificationRepository.java +++ b/src/main/java/com/onebyone/kindergarten/domain/user/repository/EmailCertificationRepository.java @@ -11,4 +11,7 @@ EmailCertification findByEmailAndCodeAndTypeAndDeletedAtIsNull( String email, String code, EmailCertificationType type); boolean existsByEmail(String email); + + EmailCertification findByEmailAndType( + String email, EmailCertificationType emailCertificationType); } diff --git a/src/main/java/com/onebyone/kindergarten/domain/user/service/UserService.java b/src/main/java/com/onebyone/kindergarten/domain/user/service/UserService.java index 7a96543..dbc5753 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/user/service/UserService.java +++ b/src/main/java/com/onebyone/kindergarten/domain/user/service/UserService.java @@ -338,43 +338,57 @@ public User signUpByApple(AppleUserResponse userResponse) { return user; } - @Transactional - public void updateHomeShortcut(Long userId, HomeShortcutsDto homeShortcutsDto) { - User user = getUserById(userId); - user.updateHomeShortcut(homeShortcutsDto.toJson()); - } - @Transactional public void saveSignUpCertification(EmailCertificationRequestDTO request, String certification) { - if (userRepository.existsByEmail(request.getEmail())) { + String email = request.getEmail(); + + if (userRepository.existsByEmail(email)) { throw new BusinessException(ErrorCodes.ALREADY_EXIST_EMAIL); } EmailCertification emailCert = - EmailCertification.builder() - .email(request.getEmail()) - .type(EmailCertificationType.EMAIL) - .code(certification) - .isCertificated(false) - .build(); + emailCertificationRepository.findByEmailAndType(email, EmailCertificationType.EMAIL); + + if (emailCert == null) { + emailCert = + EmailCertification.builder().email(email).type(EmailCertificationType.EMAIL).build(); + } + + emailCert.updateCode(certification); + emailCert.markUncertificated(); emailCertificationRepository.save(emailCert); } + @Transactional + public void updateHomeShortcut(Long userId, HomeShortcutsDto homeShortcutsDto) { + User user = getUserById(userId); + user.updateHomeShortcut(homeShortcutsDto.toJson()); + } + @Transactional public void savePasswordCertification( EmailCertificationRequestDTO request, String certification) { + String email = request.getEmail(); + if (!userRepository.existsByEmail(request.getEmail())) { throw new BusinessException(ErrorCodes.NOT_FOUND_USER); } EmailCertification passwordCert = - EmailCertification.builder() - .email(request.getEmail()) - .type(EmailCertificationType.TEMPORARY_PASSWORD) - .code(certification) - .isCertificated(false) - .build(); + emailCertificationRepository.findByEmailAndType( + email, EmailCertificationType.TEMPORARY_PASSWORD); + + if (passwordCert == null) { + passwordCert = + EmailCertification.builder() + .email(email) + .type(EmailCertificationType.TEMPORARY_PASSWORD) + .build(); + } + + passwordCert.updateCode(certification); + passwordCert.markUncertificated(); emailCertificationRepository.save(passwordCert); }