diff --git a/src/main/java/com/ureca/uplait/domain/auth/service/AuthService.java b/src/main/java/com/ureca/uplait/domain/auth/service/AuthService.java index 4467d6b..e5ea123 100644 --- a/src/main/java/com/ureca/uplait/domain/auth/service/AuthService.java +++ b/src/main/java/com/ureca/uplait/domain/auth/service/AuthService.java @@ -2,6 +2,7 @@ import java.time.LocalDateTime; +import jakarta.transaction.Transactional; import org.springframework.stereotype.Service; import com.ureca.uplait.domain.auth.api.KakaoOauthClient; @@ -81,6 +82,7 @@ public void reissue(String refreshToken, HttpServletResponse response){ jwtProvider.addRefreshTokenCookie(response, newRefreshToken); } + @Transactional public void logout(String refreshToken, HttpServletResponse response){ if (!jwtValidator.validateToken(refreshToken)) { diff --git a/src/main/java/com/ureca/uplait/domain/user/controller/UserController.java b/src/main/java/com/ureca/uplait/domain/user/controller/UserController.java index 4e07291..283f458 100644 --- a/src/main/java/com/ureca/uplait/domain/user/controller/UserController.java +++ b/src/main/java/com/ureca/uplait/domain/user/controller/UserController.java @@ -44,24 +44,24 @@ public CommonResponse addTag(@RequestBody AddTagRequest request, @Authenti } @GetMapping("/duplicate/phone") - @Operation(summary="전화번호 중복검사 API", description = "추가정보 입력 시 전화번호 중복 검사를 수행한다.") + @Operation(summary = "전화번호 중복검사 API", description = "추가정보 입력 시 전화번호 중복 검사를 수행한다.") public CommonResponse duplicatePhone( - @RequestParam("value") - @Pattern(regexp = "^010-\\d{4}-\\d{4}$", message = "전화번호는 010-xxxx-xxxx 형식이어야 합니다.") - String phoneNumber) { - boolean duplicated = userService.isPhoneNumberDuplicated(phoneNumber); + @RequestParam("value") + @Pattern(regexp = "^010-\\d{4}-\\d{4}$", message = "전화번호는 010-xxxx-xxxx 형식이어야 합니다.") String phoneNumber, + @RequestParam(value = "current", required = false) String currentPhoneNumber + ) { + boolean duplicated = userService.isPhoneNumberDuplicated(phoneNumber, currentPhoneNumber); DuplicateResponse result = new DuplicateResponse(duplicated); return CommonResponse.success(result); } @GetMapping("/duplicate/email") - @Operation(summary="이메일 중복검사 API", description = "추가정보 입력 시 이메일 중복 검사를 수행한다.") + @Operation(summary = "이메일 중복검사 API", description = "추가정보 입력 시 이메일 중복 검사를 수행한다.") public CommonResponse duplicateEmail( - @RequestParam("value") - @Email(message = "올바른 이메일 형식이 아닙니다.") - String email - ){ - boolean duplicated = userService.isEmailDuplicated(email); + @RequestParam("value") @Email(message = "올바른 이메일 형식이 아닙니다.") String email, + @RequestParam(value = "current", required = false) String currentEmail + ) { + boolean duplicated = userService.isEmailDuplicated(email, currentEmail); DuplicateResponse result = new DuplicateResponse(duplicated); return CommonResponse.success(result); } diff --git a/src/main/java/com/ureca/uplait/domain/user/service/UserService.java b/src/main/java/com/ureca/uplait/domain/user/service/UserService.java index de3cf00..5c4ab6c 100644 --- a/src/main/java/com/ureca/uplait/domain/user/service/UserService.java +++ b/src/main/java/com/ureca/uplait/domain/user/service/UserService.java @@ -51,12 +51,17 @@ public void addUserTag(AddTagRequest request, User user) { } } - public boolean isPhoneNumberDuplicated( - @Pattern(regexp = "^010-\\d{4}-\\d{4}$", message = "전화번호는 010-xxxx-xxxx 형식이어야 합니다.") String phoneNumber) { + public boolean isPhoneNumberDuplicated(String phoneNumber, String currentPhoneNumber) { + if (phoneNumber.equals(currentPhoneNumber)) { + return false; + } return userRepository.existsByPhoneNumber(phoneNumber); } - public boolean isEmailDuplicated(@Email(message = "올바른 이메일 형식이 아닙니다.") String email) { + public boolean isEmailDuplicated(String email, String currentEmail) { + if (email.equals(currentEmail)) { + return false; + } return userRepository.existsByEmail(email); } } diff --git a/src/test/java/com/ureca/uplait/domain/admin/service/AdminReviewServiceTest.java b/src/test/java/com/ureca/uplait/domain/admin/service/AdminReviewServiceTest.java index 522b391..961e705 100644 --- a/src/test/java/com/ureca/uplait/domain/admin/service/AdminReviewServiceTest.java +++ b/src/test/java/com/ureca/uplait/domain/admin/service/AdminReviewServiceTest.java @@ -1,5 +1,6 @@ package com.ureca.uplait.domain.admin.service; +import com.ureca.uplait.domain.admin.dto.response.AdminDetailReviewResponse; import com.ureca.uplait.domain.admin.dto.response.AdminReviewDeleteResponse; import com.ureca.uplait.domain.admin.dto.response.AdminReviewResponse; import com.ureca.uplait.domain.plan.entity.MobilePlan; @@ -103,16 +104,14 @@ void getAllReviewsForAdmin() { review1.getUser().getName(), review1.getTitle(), review1.getRating(), - "25.06.08", - review1.getContent() + LocalDateTime.now() ); AdminReviewResponse response2 = new AdminReviewResponse( review2.getId(), review2.getUser().getName(), review2.getTitle(), review2.getRating(), - "25.06.09", - review2.getContent() + LocalDateTime.now() ); Page page = new PageImpl<>(List.of(response1, response2)); @@ -138,7 +137,7 @@ void getReviewDetailForAdmin() { when(reviewRepository.findById(user.getId())).thenReturn(Optional.of(review1)); //when - AdminReviewResponse response = adminReviewService.getReviewDetailForAdmin(user.getId()); + AdminDetailReviewResponse response = adminReviewService.getReviewDetailForAdmin(user.getId(), user); //then assertEquals(1L, response.getReviewId()); @@ -157,7 +156,7 @@ void getReviewDetailForAdmin_Exception() { //when & then GlobalException exception = assertThrows(GlobalException.class, () -> { - adminReviewService.getReviewDetailForAdmin(review1.getId()); + adminReviewService.getReviewDetailForAdmin(review1.getId(), user); }); assertEquals(ResultCode.REVIEW_NOT_FOUND, exception.getResultCode()); diff --git a/src/test/java/com/ureca/uplait/domain/user/service/UserServiceTest.java b/src/test/java/com/ureca/uplait/domain/user/service/UserServiceTest.java index 8366233..dc36e08 100644 --- a/src/test/java/com/ureca/uplait/domain/user/service/UserServiceTest.java +++ b/src/test/java/com/ureca/uplait/domain/user/service/UserServiceTest.java @@ -2,8 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.*; import com.ureca.uplait.domain.user.dto.request.ExtraInfoRequest; import com.ureca.uplait.domain.user.entity.User; @@ -73,9 +72,10 @@ void updateUserExtraInfo_success() { @DisplayName("전화번호 중복 - x") void isPhoneNumberDuplicated_returnsFalse() { String uniquePhoneNumber = "010-1234-5678"; + String currentPhoneNumber = null; given(userRepository.existsByPhoneNumber(uniquePhoneNumber)).willReturn(false); - boolean isDuplicated = userService.isPhoneNumberDuplicated(uniquePhoneNumber); + boolean isDuplicated = userService.isPhoneNumberDuplicated(uniquePhoneNumber, currentPhoneNumber); assertThat(isDuplicated).isFalse(); verify(userRepository, times(1)).existsByPhoneNumber(uniquePhoneNumber); @@ -85,21 +85,35 @@ void isPhoneNumberDuplicated_returnsFalse() { @DisplayName("전화번호 중복 - o") void isPhoneNumberDuplicated_returnsTrue() { String duplicatedPhoneNumber = "010-9876-5432"; + String currentPhoneNumber = null; given(userRepository.existsByPhoneNumber(duplicatedPhoneNumber)).willReturn(true); - boolean isDuplicated = userService.isPhoneNumberDuplicated(duplicatedPhoneNumber); + boolean isDuplicated = userService.isPhoneNumberDuplicated(duplicatedPhoneNumber, currentPhoneNumber); assertThat(isDuplicated).isTrue(); verify(userRepository, times(1)).existsByPhoneNumber(duplicatedPhoneNumber); } + @Test + @DisplayName("전화번호 중복 - 전화번호 변경이 없는 경우") + void isPhoneNumberDuplicated_samePhoneNumber() { + String uniquePhoneNumber = "010-1234-5678"; + String currentPhoneNumber = "010-1234-5678"; + + boolean isDuplicated = userService.isPhoneNumberDuplicated(uniquePhoneNumber, currentPhoneNumber); + + assertThat(isDuplicated).isFalse(); + verify(userRepository, never()).existsByPhoneNumber(uniquePhoneNumber); + } + @Test @DisplayName("이메일 중복 - x") void isEmailDuplicated_returnsFalse() { String uniqueEmail = "unique@example.com"; + String currentEmail = null; given(userRepository.existsByEmail(uniqueEmail)).willReturn(false); - boolean isDuplicated = userService.isEmailDuplicated(uniqueEmail); + boolean isDuplicated = userService.isEmailDuplicated(uniqueEmail, currentEmail); assertThat(isDuplicated).isFalse(); verify(userRepository, times(1)).existsByEmail(uniqueEmail); @@ -109,11 +123,24 @@ void isEmailDuplicated_returnsFalse() { @DisplayName("이메일 중복 - o") void isEmailDuplicated_returnsTrue() { String duplicatedEmail = "duplicated@example.com"; + String currentEmail = null; given(userRepository.existsByEmail(duplicatedEmail)).willReturn(true); - boolean isDuplicated = userService.isEmailDuplicated(duplicatedEmail); + boolean isDuplicated = userService.isEmailDuplicated(duplicatedEmail, currentEmail); assertThat(isDuplicated).isTrue(); verify(userRepository, times(1)).existsByEmail(duplicatedEmail); } + + @Test + @DisplayName("이메일 중복 - 이메일 변경이 없는 경우") + void isEmailDuplicated_sameEmail() { + String uniqueEmail = "unique@example.com"; + String currentEmail = "unique@example.com"; + + boolean isDuplicated = userService.isEmailDuplicated(uniqueEmail, currentEmail); + + assertThat(isDuplicated).isFalse(); + verify(userRepository, never()).existsByEmail(uniqueEmail); + } } \ No newline at end of file