Skip to content

Commit

Permalink
Feat: 유저 닉네임 변경 api 구현 (#152)
Browse files Browse the repository at this point in the history
* #151 - chore: 잘못된 패키지 명 수정

* #151 - feat: 유저의 이름을 변경하는 api 구현

* #151 - test: 유저 이름 변경 api 테스트 작성
  • Loading branch information
GGHDMS authored Feb 19, 2024
1 parent f22e678 commit 631937a
Show file tree
Hide file tree
Showing 11 changed files with 86 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -46,4 +48,13 @@ public ResponseEntity<Void> changeProfileStatus(
return ResponseEntity.ok().build();
}

@PatchMapping("/name")
public ResponseEntity<Void> changeName(
@Valid @RequestBody NameChangeRequest nameChangeRequest,
@AuthenticationPrincipal AuthDetails details
) {
memberService.changeName(nameChangeRequest.name(), details.getId());
return ResponseEntity.ok().build();
}

}
5 changes: 5 additions & 0 deletions src/main/java/cotato/bookitlist/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class Member extends BaseEntity {

private String email;

//TODO: name에 대한 제한을 만들어야한다.
private String name;

private String oauth2Id;
Expand Down Expand Up @@ -77,4 +78,8 @@ public void changeProfileStatus() {
profileStatus = ProfileStatus.PRIVATE;
}
}

public void changeName(String name) {
this.name = name;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package cotato.bookitlist.member.dto.request;

import jakarta.validation.constraints.NotBlank;

public record NameChangeRequest(
@NotBlank
String name
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/cotato/bookitlist/post/service/PostService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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())
;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 631937a

Please sign in to comment.