From 631937a47618bcb98cec17c02adb17310b521f65 Mon Sep 17 00:00:00 2001 From: HeoSeoKMun <48712043+GGHDMS@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:54:28 +0900 Subject: [PATCH] =?UTF-8?q?Feat:=20=EC=9C=A0=EC=A0=80=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EB=B3=80=EA=B2=BD=20api=20=EA=B5=AC=ED=98=84=20(#1?= =?UTF-8?q?52)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #151 - chore: 잘못된 패키지 명 수정 * #151 - feat: 유저의 이름을 변경하는 api 구현 * #151 - test: 유저 이름 변경 api 테스트 작성 --- .../member/controller/MemberController.java | 11 +++++++ .../bookitlist/member/domain/Member.java | 5 ++++ .../member/dto/request/NameChangeRequest.java | 9 ++++++ .../member/service/MemberService.java | 6 ++++ .../post/controller/PostController.java | 4 +-- .../PostRegisterRequest.java | 2 +- .../PostUpdateRequest.java | 2 +- .../bookitlist/post/service/PostService.java | 4 +-- .../controller/MemberControllerTest.java | 30 +++++++++++++++++++ .../member/service/MemberServiceTest.java | 17 +++++++++++ .../post/controller/PostControllerTest.java | 4 +-- 11 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 src/main/java/cotato/bookitlist/member/dto/request/NameChangeRequest.java rename src/main/java/cotato/bookitlist/post/dto/{requeset => request}/PostRegisterRequest.java (95%) rename src/main/java/cotato/bookitlist/post/dto/{requeset => request}/PostUpdateRequest.java (95%) diff --git a/src/main/java/cotato/bookitlist/member/controller/MemberController.java b/src/main/java/cotato/bookitlist/member/controller/MemberController.java index bc81a4f..380b4a3 100644 --- a/src/main/java/cotato/bookitlist/member/controller/MemberController.java +++ b/src/main/java/cotato/bookitlist/member/controller/MemberController.java @@ -1,9 +1,11 @@ package cotato.bookitlist.member.controller; import cotato.bookitlist.config.security.jwt.AuthDetails; +import cotato.bookitlist.member.dto.request.NameChangeRequest; import cotato.bookitlist.member.dto.response.MemberResponse; import cotato.bookitlist.member.dto.response.ProfileResponse; import cotato.bookitlist.member.service.MemberService; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -46,4 +48,13 @@ public ResponseEntity changeProfileStatus( return ResponseEntity.ok().build(); } + @PatchMapping("/name") + public ResponseEntity changeName( + @Valid @RequestBody NameChangeRequest nameChangeRequest, + @AuthenticationPrincipal AuthDetails details + ) { + memberService.changeName(nameChangeRequest.name(), details.getId()); + return ResponseEntity.ok().build(); + } + } diff --git a/src/main/java/cotato/bookitlist/member/domain/Member.java b/src/main/java/cotato/bookitlist/member/domain/Member.java index 7124684..faafc3f 100644 --- a/src/main/java/cotato/bookitlist/member/domain/Member.java +++ b/src/main/java/cotato/bookitlist/member/domain/Member.java @@ -25,6 +25,7 @@ public class Member extends BaseEntity { private String email; + //TODO: name에 대한 제한을 만들어야한다. private String name; private String oauth2Id; @@ -77,4 +78,8 @@ public void changeProfileStatus() { profileStatus = ProfileStatus.PRIVATE; } } + + public void changeName(String name) { + this.name = name; + } } diff --git a/src/main/java/cotato/bookitlist/member/dto/request/NameChangeRequest.java b/src/main/java/cotato/bookitlist/member/dto/request/NameChangeRequest.java new file mode 100644 index 0000000..864107f --- /dev/null +++ b/src/main/java/cotato/bookitlist/member/dto/request/NameChangeRequest.java @@ -0,0 +1,9 @@ +package cotato.bookitlist.member.dto.request; + +import jakarta.validation.constraints.NotBlank; + +public record NameChangeRequest( + @NotBlank + String name +) { +} diff --git a/src/main/java/cotato/bookitlist/member/service/MemberService.java b/src/main/java/cotato/bookitlist/member/service/MemberService.java index a6af24c..564bd20 100644 --- a/src/main/java/cotato/bookitlist/member/service/MemberService.java +++ b/src/main/java/cotato/bookitlist/member/service/MemberService.java @@ -42,4 +42,10 @@ public void changeProfileStatus(Long memberId) { Member member = memberRepository.getReferenceById(memberId); member.changeProfileStatus(); } + + public void changeName(String name, Long memberId) { + Member member = memberRepository.getReferenceById(memberId); + member.changeName(name); + } + } diff --git a/src/main/java/cotato/bookitlist/post/controller/PostController.java b/src/main/java/cotato/bookitlist/post/controller/PostController.java index 992545a..af3b84b 100644 --- a/src/main/java/cotato/bookitlist/post/controller/PostController.java +++ b/src/main/java/cotato/bookitlist/post/controller/PostController.java @@ -2,8 +2,8 @@ import cotato.bookitlist.book.annotation.IsValidIsbn; import cotato.bookitlist.config.security.jwt.AuthDetails; -import cotato.bookitlist.post.dto.requeset.PostRegisterRequest; -import cotato.bookitlist.post.dto.requeset.PostUpdateRequest; +import cotato.bookitlist.post.dto.request.PostRegisterRequest; +import cotato.bookitlist.post.dto.request.PostUpdateRequest; import cotato.bookitlist.post.dto.response.PostCountResponse; import cotato.bookitlist.post.dto.response.PostListResponse; import cotato.bookitlist.post.dto.response.PostDetailResponse; diff --git a/src/main/java/cotato/bookitlist/post/dto/requeset/PostRegisterRequest.java b/src/main/java/cotato/bookitlist/post/dto/request/PostRegisterRequest.java similarity index 95% rename from src/main/java/cotato/bookitlist/post/dto/requeset/PostRegisterRequest.java rename to src/main/java/cotato/bookitlist/post/dto/request/PostRegisterRequest.java index 36b81fd..0b38491 100644 --- a/src/main/java/cotato/bookitlist/post/dto/requeset/PostRegisterRequest.java +++ b/src/main/java/cotato/bookitlist/post/dto/request/PostRegisterRequest.java @@ -1,4 +1,4 @@ -package cotato.bookitlist.post.dto.requeset; +package cotato.bookitlist.post.dto.request; import cotato.bookitlist.book.annotation.IsValidIsbn; import cotato.bookitlist.post.domain.PostStatus; diff --git a/src/main/java/cotato/bookitlist/post/dto/requeset/PostUpdateRequest.java b/src/main/java/cotato/bookitlist/post/dto/request/PostUpdateRequest.java similarity index 95% rename from src/main/java/cotato/bookitlist/post/dto/requeset/PostUpdateRequest.java rename to src/main/java/cotato/bookitlist/post/dto/request/PostUpdateRequest.java index f714236..6b32ead 100644 --- a/src/main/java/cotato/bookitlist/post/dto/requeset/PostUpdateRequest.java +++ b/src/main/java/cotato/bookitlist/post/dto/request/PostUpdateRequest.java @@ -1,4 +1,4 @@ -package cotato.bookitlist.post.dto.requeset; +package cotato.bookitlist.post.dto.request; import cotato.bookitlist.post.domain.PostStatus; import cotato.bookitlist.post.domain.PostTemplate; diff --git a/src/main/java/cotato/bookitlist/post/service/PostService.java b/src/main/java/cotato/bookitlist/post/service/PostService.java index cdd32b5..2cf55f6 100644 --- a/src/main/java/cotato/bookitlist/post/service/PostService.java +++ b/src/main/java/cotato/bookitlist/post/service/PostService.java @@ -7,8 +7,8 @@ import cotato.bookitlist.member.repository.MemberRepository; import cotato.bookitlist.post.domain.entity.Post; import cotato.bookitlist.post.dto.PostDetailDto; -import cotato.bookitlist.post.dto.requeset.PostRegisterRequest; -import cotato.bookitlist.post.dto.requeset.PostUpdateRequest; +import cotato.bookitlist.post.dto.request.PostRegisterRequest; +import cotato.bookitlist.post.dto.request.PostUpdateRequest; import cotato.bookitlist.post.dto.response.PostCountResponse; import cotato.bookitlist.post.dto.response.PostListResponse; import cotato.bookitlist.post.repository.PostRepository; diff --git a/src/test/java/cotato/bookitlist/member/controller/MemberControllerTest.java b/src/test/java/cotato/bookitlist/member/controller/MemberControllerTest.java index 862fe6d..9f3ea78 100644 --- a/src/test/java/cotato/bookitlist/member/controller/MemberControllerTest.java +++ b/src/test/java/cotato/bookitlist/member/controller/MemberControllerTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import cotato.bookitlist.annotation.WithCustomMockUser; +import cotato.bookitlist.member.dto.request.NameChangeRequest; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -101,4 +102,33 @@ void givenLoginMember_whenChangingProfileStatus_thenChangeProfileStatus() throws ; } + @Test + @WithCustomMockUser + @DisplayName("유저 이름을 변경한다.") + void givenName_whenChangingName_thenChangeName() throws Exception{ + //given + NameChangeRequest request = new NameChangeRequest("newName"); + + //when & then + mockMvc.perform(patch("/members/name") + .content(objectMapper.writeValueAsBytes(request)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + ; + } + + @Test + @DisplayName("로그인 없이 유저 이름을 변경하면 에러를 반환한다.") + void givenNonLogin_whenChangingName_thenReturnErrorResponse() throws Exception { + //given + NameChangeRequest request = new NameChangeRequest("newName"); + + //when & then + mockMvc.perform(patch("/members/name") + .content(objectMapper.writeValueAsBytes(request)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isUnauthorized()) + ; + } + } diff --git a/src/test/java/cotato/bookitlist/member/service/MemberServiceTest.java b/src/test/java/cotato/bookitlist/member/service/MemberServiceTest.java index f7789b3..6c6adad 100644 --- a/src/test/java/cotato/bookitlist/member/service/MemberServiceTest.java +++ b/src/test/java/cotato/bookitlist/member/service/MemberServiceTest.java @@ -41,5 +41,22 @@ void givenMemberId_whenChangingProfileStatus_thenChangeProfileStatus() throws Ex assertThat(member.getProfileStatus()).isEqualTo(ProfileStatus.PRIVATE); } + @Test + @DisplayName("유저의 이름을 변경한다.") + void givenName_whenChangingName_thenChangeName() throws Exception{ + //given + Long memberId = 1L; + Member member = createMember(memberId); + String name = "newName"; + given(memberRepository.getReferenceById(memberId)).willReturn(member); + + //when + sut.changeName(name, memberId); + + //then + then(memberRepository).should().getReferenceById(memberId); + assertThat(member.getName()).isEqualTo(name); + } + } diff --git a/src/test/java/cotato/bookitlist/post/controller/PostControllerTest.java b/src/test/java/cotato/bookitlist/post/controller/PostControllerTest.java index 95c2be0..a61446a 100644 --- a/src/test/java/cotato/bookitlist/post/controller/PostControllerTest.java +++ b/src/test/java/cotato/bookitlist/post/controller/PostControllerTest.java @@ -3,8 +3,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import cotato.bookitlist.annotation.WithCustomMockUser; import cotato.bookitlist.post.domain.PostStatus; -import cotato.bookitlist.post.dto.requeset.PostRegisterRequest; -import cotato.bookitlist.post.dto.requeset.PostUpdateRequest; +import cotato.bookitlist.post.dto.request.PostRegisterRequest; +import cotato.bookitlist.post.dto.request.PostUpdateRequest; import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test;