From 4fd4b5248d80efb173db8e3bd79aed97b311ba7a Mon Sep 17 00:00:00 2001 From: yb__char <68099546+char-yb@users.noreply.github.com> Date: Mon, 26 Aug 2024 22:04:08 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=B3=B8=EC=9D=B8=20nickname=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20(#231)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/application/MemberService.java | 3 ++- .../member/dao/MemberRepositoryCustom.java | 2 +- .../member/dao/MemberRepositoryImpl.java | 11 ++++++-- .../stonebed/global/util/MemberUtil.java | 8 +++--- .../member/application/MemberServiceTest.java | 4 ++- .../stonebed/global/util/MemberUtilTest.java | 27 +++++++++++++------ 6 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/member/application/MemberService.java b/src/main/java/com/depromeet/stonebed/domain/member/application/MemberService.java index b008e4f2..a0925b03 100644 --- a/src/main/java/com/depromeet/stonebed/domain/member/application/MemberService.java +++ b/src/main/java/com/depromeet/stonebed/domain/member/application/MemberService.java @@ -31,7 +31,8 @@ public MemberInfoResponse findMemberInfo(Long memberId) { @Transactional(readOnly = true) public void checkNickname(NicknameCheckRequest request) { - memberUtil.checkNickname(request); + final Member currentMember = memberUtil.getCurrentMember(); + memberUtil.checkNickname(request, currentMember); } public void modifyMemberProfile(MemberProfileUpdateRequest request) { diff --git a/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryCustom.java b/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryCustom.java index 96619bf5..fe16582d 100644 --- a/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryCustom.java +++ b/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryCustom.java @@ -2,5 +2,5 @@ public interface MemberRepositoryCustom { - boolean existsByProfileNickname(String nickname); + boolean existsByProfileNickname(String nickname, String currentNickname); } diff --git a/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryImpl.java b/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryImpl.java index 391e6e2a..87f0a711 100644 --- a/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryImpl.java +++ b/src/main/java/com/depromeet/stonebed/domain/member/dao/MemberRepositoryImpl.java @@ -13,12 +13,15 @@ public class MemberRepositoryImpl implements MemberRepositoryCustom { private final JPAQueryFactory jpaQueryFactory; @Override - public boolean existsByProfileNickname(String nickname) { + public boolean existsByProfileNickname(String nickname, String currentNickname) { // 존재하는 경우의 쿼리 return jpaQueryFactory .selectOne() .from(member) - .where(isProfileNickname(nickname).and(isNotEmptyProfileNickname())) + .where( + isProfileNickname(nickname) + .and(isNotEmptyProfileNickname()) + .and(isMyNickname(currentNickname))) .fetchFirst() != null; } @@ -30,4 +33,8 @@ private BooleanExpression isProfileNickname(String nickname) { private BooleanExpression isNotEmptyProfileNickname() { return member.profile.nickname.ne(""); } + + private BooleanExpression isMyNickname(String currentNickname) { + return member.profile.nickname.ne(currentNickname); + } } diff --git a/src/main/java/com/depromeet/stonebed/global/util/MemberUtil.java b/src/main/java/com/depromeet/stonebed/global/util/MemberUtil.java index 408b86f0..de548731 100644 --- a/src/main/java/com/depromeet/stonebed/global/util/MemberUtil.java +++ b/src/main/java/com/depromeet/stonebed/global/util/MemberUtil.java @@ -39,8 +39,8 @@ public String getMemberRole() { } @Transactional(readOnly = true) - public void checkNickname(NicknameCheckRequest request) { - validateNicknameNotDuplicate(request.nickname()); + public void checkNickname(NicknameCheckRequest request, Member currentMember) { + validateNicknameNotDuplicate(request.nickname(), currentMember.getProfile().getNickname()); if (validateNicknameText(request.nickname())) { throw new CustomException(ErrorCode.MEMBER_INVALID_NICKNAME); } @@ -50,8 +50,8 @@ private boolean validateNicknameText(String nickname) { return nickname == null || nickname.length() < 2 || nickname.length() > 14; } - private void validateNicknameNotDuplicate(String nickname) { - if (memberRepository.existsByProfileNickname(nickname)) { + private void validateNicknameNotDuplicate(String nickname, String currentNickname) { + if (memberRepository.existsByProfileNickname(nickname, currentNickname)) { throw new CustomException(ErrorCode.MEMBER_ALREADY_NICKNAME); } } diff --git a/src/test/java/com/depromeet/stonebed/domain/member/application/MemberServiceTest.java b/src/test/java/com/depromeet/stonebed/domain/member/application/MemberServiceTest.java index 7f4e8899..836582d6 100644 --- a/src/test/java/com/depromeet/stonebed/domain/member/application/MemberServiceTest.java +++ b/src/test/java/com/depromeet/stonebed/domain/member/application/MemberServiceTest.java @@ -46,13 +46,15 @@ class MemberServiceTest extends FixtureMonkeySetUp { @Test void 닉네임을_검증한다() { // given + Member member = fixtureMonkey.giveMeOne(Member.class); + when(memberUtil.getCurrentMember()).thenReturn(member); NicknameCheckRequest request = fixtureMonkey.giveMeOne(NicknameCheckRequest.class); // when memberService.checkNickname(request); // then - verify(memberUtil).checkNickname(request); + verify(memberUtil).checkNickname(request, member); } @Test diff --git a/src/test/java/com/depromeet/stonebed/global/util/MemberUtilTest.java b/src/test/java/com/depromeet/stonebed/global/util/MemberUtilTest.java index d3803bec..066fb5e4 100644 --- a/src/test/java/com/depromeet/stonebed/global/util/MemberUtilTest.java +++ b/src/test/java/com/depromeet/stonebed/global/util/MemberUtilTest.java @@ -98,50 +98,61 @@ class MemberUtilTest extends FixtureMonkeySetUp { @Test void checkNickname_성공() { // given + Member member = fixtureMonkey.giveMeOne(Member.class); String nickname = "validNickname"; NicknameCheckRequest request = new NicknameCheckRequest(nickname); - when(memberRepository.existsByProfileNickname(nickname)).thenReturn(false); + when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname())) + .thenReturn(false); // when & then - assertDoesNotThrow(() -> memberUtil.checkNickname(request)); + assertDoesNotThrow(() -> memberUtil.checkNickname(request, member)); } @Test void checkNickname_실패_MEMBER_ALREADY_NICKNAME() { // given + Member member = fixtureMonkey.giveMeOne(Member.class); String nickname = "duplicateNickname"; NicknameCheckRequest request = new NicknameCheckRequest(nickname); - when(memberRepository.existsByProfileNickname(nickname)).thenReturn(true); + when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname())) + .thenReturn(true); // when & then CustomException exception = - assertThrows(CustomException.class, () -> memberUtil.checkNickname(request)); + assertThrows( + CustomException.class, () -> memberUtil.checkNickname(request, member)); assertEquals(ErrorCode.MEMBER_ALREADY_NICKNAME, exception.getErrorCode()); } @Test void checkNickname_실패_MEMBER_INVALID_NICKNAME_길이_1() { // given + Member member = fixtureMonkey.giveMeOne(Member.class); String nickname = "a"; NicknameCheckRequest request = new NicknameCheckRequest(nickname); - when(memberRepository.existsByProfileNickname(nickname)).thenReturn(false); + when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname())) + .thenReturn(false); // when & then CustomException exception = - assertThrows(CustomException.class, () -> memberUtil.checkNickname(request)); + assertThrows( + CustomException.class, () -> memberUtil.checkNickname(request, member)); assertEquals(ErrorCode.MEMBER_INVALID_NICKNAME, exception.getErrorCode()); } @Test void checkNickname_실패_MEMBER_INVALID_NICKNAME_길이_15() { // given + Member member = fixtureMonkey.giveMeOne(Member.class); String nickname = "a".repeat(15); NicknameCheckRequest request = new NicknameCheckRequest(nickname); - when(memberRepository.existsByProfileNickname(nickname)).thenReturn(false); + when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname())) + .thenReturn(false); // when & then CustomException exception = - assertThrows(CustomException.class, () -> memberUtil.checkNickname(request)); + assertThrows( + CustomException.class, () -> memberUtil.checkNickname(request, member)); assertEquals(ErrorCode.MEMBER_INVALID_NICKNAME, exception.getErrorCode()); } }