diff --git a/src/main/java/ject/componote/domain/auth/api/MemberController.java b/src/main/java/ject/componote/domain/auth/api/MemberController.java index 122c9a47..651e040b 100644 --- a/src/main/java/ject/componote/domain/auth/api/MemberController.java +++ b/src/main/java/ject/componote/domain/auth/api/MemberController.java @@ -3,9 +3,8 @@ import jakarta.validation.Valid; import ject.componote.domain.auth.application.MemberService; import ject.componote.domain.auth.dto.find.response.MemberSummaryResponse; -import ject.componote.domain.auth.dto.update.request.MemberNicknameUpdateRequest; -import ject.componote.domain.auth.dto.update.request.MemberProfileImageUpdateRequest; import ject.componote.domain.auth.dto.update.request.MemberEmailUpdateRequest; +import ject.componote.domain.auth.dto.update.request.MemberUpdateRequest; import ject.componote.domain.auth.dto.verify.request.MemberEmailVerificationRequest; import ject.componote.domain.auth.model.AuthPrincipal; import ject.componote.domain.auth.model.Authenticated; @@ -33,18 +32,10 @@ public ResponseEntity getMemberSummary(@Authenticated fin ); } - @PutMapping("/profile-image") - public ResponseEntity updateProfileImage(@Authenticated final AuthPrincipal authPrincipal, - @RequestBody @Valid final MemberProfileImageUpdateRequest request) { - memberService.updateProfileImage(authPrincipal, request); - return ResponseEntity.noContent() - .build(); - } - - @PutMapping("/nickname") - public ResponseEntity updateNickname(@Authenticated final AuthPrincipal authPrincipal, - @RequestBody @Valid final MemberNicknameUpdateRequest request) { - memberService.updateNickname(authPrincipal, request); + @PutMapping + public ResponseEntity updateMember(@Authenticated final AuthPrincipal authPrincipal, + @RequestBody @Valid final MemberUpdateRequest request) { + memberService.updateMember(authPrincipal, request); return ResponseEntity.noContent() .build(); } diff --git a/src/main/java/ject/componote/domain/auth/application/MemberService.java b/src/main/java/ject/componote/domain/auth/application/MemberService.java index 75db191a..66fe9b5d 100644 --- a/src/main/java/ject/componote/domain/auth/application/MemberService.java +++ b/src/main/java/ject/componote/domain/auth/application/MemberService.java @@ -1,12 +1,12 @@ package ject.componote.domain.auth.application; import ject.componote.domain.auth.dao.MemberRepository; +import ject.componote.domain.auth.domain.Job; import ject.componote.domain.auth.domain.Member; import ject.componote.domain.auth.dto.find.response.MemberSummaryResponse; import ject.componote.domain.auth.dto.image.event.ProfileImageMoveEvent; import ject.componote.domain.auth.dto.update.request.MemberEmailUpdateRequest; -import ject.componote.domain.auth.dto.update.request.MemberNicknameUpdateRequest; -import ject.componote.domain.auth.dto.update.request.MemberProfileImageUpdateRequest; +import ject.componote.domain.auth.dto.update.request.MemberUpdateRequest; import ject.componote.domain.auth.dto.verify.event.EmailVerificationCodeSendEvent; import ject.componote.domain.auth.dto.verify.request.MemberEmailVerificationRequest; import ject.componote.domain.auth.error.DuplicatedEmailException; @@ -38,9 +38,25 @@ public MemberSummaryResponse getMemberSummary(final AuthPrincipal authPrincipal) } @Transactional - public void updateProfileImage(final AuthPrincipal authPrincipal, final MemberProfileImageUpdateRequest request) { + public void updateMember(final AuthPrincipal authPrincipal, final MemberUpdateRequest request) { final Member member = findMemberById(authPrincipal.id()); - final ProfileImage profileImage = ProfileImage.from(request.profileImageObjectKey()); + updateProfileImage(member, request.profileImageObjectKey()); + updateJob(member, request.job()); + updateNickname(member, request.nickname()); + } + + @Transactional + public void updateEmail(final AuthPrincipal authPrincipal, final MemberEmailUpdateRequest request) { + final Member member = findMemberById(authPrincipal.id()); + final Email email = Email.from(request.email()); + validateSameEmail(member, email); + validateDuplicatedEmail(email); + verificationCodeService.verifyEmailCode(request.email(), request.verificationCode()); + member.updateEmail(email); + } + + private void updateProfileImage(final Member member, final String profileImageObjectKey) { + final ProfileImage profileImage = ProfileImage.from(profileImageObjectKey); if (member.equalsProfileImage(profileImage)) { return; } @@ -49,10 +65,12 @@ public void updateProfileImage(final AuthPrincipal authPrincipal, final MemberPr eventPublisher.publishEvent(ProfileImageMoveEvent.from(member)); } - @Transactional - public void updateNickname(final AuthPrincipal authPrincipal, final MemberNicknameUpdateRequest request) { - final Member member = findMemberById(authPrincipal.id()); - final Nickname nickname = Nickname.from(request.nickname()); + private void updateJob(final Member member, final Job job) { + member.updateJob(job); + } + + private void updateNickname(final Member member, final String nicknameValue) { + final Nickname nickname = Nickname.from(nicknameValue); if (member.equalsNickname(nickname)) { return; } @@ -64,16 +82,6 @@ public void updateNickname(final AuthPrincipal authPrincipal, final MemberNickna member.updateNickname(nickname); } - @Transactional - public void updateEmail(final AuthPrincipal authPrincipal, final MemberEmailUpdateRequest request) { - final Member member = findMemberById(authPrincipal.id()); - final Email email = Email.from(request.email()); - validateSameEmail(member, email); - validateDuplicatedEmail(email); - verificationCodeService.verifyEmailCode(request.email(), request.verificationCode()); - member.updateEmail(email); - } - public void sendVerificationCode(final AuthPrincipal authPrincipal, final MemberEmailVerificationRequest request) { final Email email = Email.from(request.email()); validateDuplicatedEmail(email); diff --git a/src/main/java/ject/componote/domain/auth/domain/Member.java b/src/main/java/ject/componote/domain/auth/domain/Member.java index 668ef62e..795ff0f4 100644 --- a/src/main/java/ject/componote/domain/auth/domain/Member.java +++ b/src/main/java/ject/componote/domain/auth/domain/Member.java @@ -96,6 +96,10 @@ public void updateEmail(final Email email) { this.email = email; } + public void updateJob(final Job job) { + this.job = job; + } + public boolean hasEmail() { return this.email != null; } diff --git a/src/main/java/ject/componote/domain/auth/dto/update/request/MemberUpdateRequest.java b/src/main/java/ject/componote/domain/auth/dto/update/request/MemberUpdateRequest.java new file mode 100644 index 00000000..03a9ea9b --- /dev/null +++ b/src/main/java/ject/componote/domain/auth/dto/update/request/MemberUpdateRequest.java @@ -0,0 +1,13 @@ +package ject.componote.domain.auth.dto.update.request; + +import jakarta.annotation.Nullable; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import ject.componote.domain.auth.domain.Job; + +public record MemberUpdateRequest( + @NotBlank String nickname, + @NotNull Job job, + @Nullable String profileImageObjectKey + ) { +} diff --git a/src/test/java/ject/componote/domain/auth/application/MemberServiceTest.java b/src/test/java/ject/componote/domain/auth/application/MemberServiceTest.java index 1886f1cf..865c7181 100644 --- a/src/test/java/ject/componote/domain/auth/application/MemberServiceTest.java +++ b/src/test/java/ject/componote/domain/auth/application/MemberServiceTest.java @@ -2,11 +2,11 @@ import ject.componote.domain.auth.dao.MemberRepository; import ject.componote.domain.auth.dao.MemberSummaryDao; +import ject.componote.domain.auth.domain.Job; import ject.componote.domain.auth.domain.Member; import ject.componote.domain.auth.dto.find.response.MemberSummaryResponse; import ject.componote.domain.auth.dto.update.request.MemberEmailUpdateRequest; -import ject.componote.domain.auth.dto.update.request.MemberNicknameUpdateRequest; -import ject.componote.domain.auth.dto.update.request.MemberProfileImageUpdateRequest; +import ject.componote.domain.auth.dto.update.request.MemberUpdateRequest; import ject.componote.domain.auth.dto.verify.event.EmailVerificationCodeSendEvent; import ject.componote.domain.auth.dto.verify.request.MemberEmailVerificationRequest; import ject.componote.domain.auth.error.DuplicatedNicknameException; @@ -73,41 +73,29 @@ public void getMemberSummary() throws Exception { } @Test - @DisplayName("프로필 사진 변경") - public void updateProfileImage() throws Exception { - // given - final Long memberId = member.getId(); - final String newObjectKey = "new.jpg"; - final MemberProfileImageUpdateRequest request = new MemberProfileImageUpdateRequest(newObjectKey); - final ProfileImage newProfileImage = ProfileImage.from(newObjectKey); - - // when - doReturn(Optional.of(member)).when(memberRepository) - .findById(memberId); - memberService.updateProfileImage(authPrincipal, request); - - // then - assertThat(member.equalsProfileImage(newProfileImage)).isTrue(); - } - - @Test - @DisplayName("닉네임 변경") - public void updateNickname() throws Exception { + @DisplayName("회원 정보 변경") + public void updateMember() throws Exception { // given final Long memberId = member.getId(); + final String newProfileImageObjectKey = "new.jpg"; + final ProfileImage newProfileImage = ProfileImage.from(newProfileImageObjectKey); final String newNicknameValue = "newNick"; final Nickname newNickname = Nickname.from(newNicknameValue); - final MemberNicknameUpdateRequest request = new MemberNicknameUpdateRequest(newNicknameValue); + final Job newJob = Job.DESIGNER; + + final MemberUpdateRequest request = new MemberUpdateRequest(newNicknameValue, newJob, newProfileImageObjectKey); // when doReturn(Optional.of(member)).when(memberRepository) .findById(memberId); doReturn(false).when(memberRepository) .existsByNickname(newNickname); - memberService.updateNickname(authPrincipal, request); + memberService.updateMember(authPrincipal, request); // then + assertThat(member.equalsProfileImage(newProfileImage)).isTrue(); assertThat(member.equalsNickname(newNickname)).isTrue(); + assertThat(member.getJob() == newJob).isTrue(); } @Test @@ -157,13 +145,16 @@ public void sendVerificationCode() throws Exception { } @Test - @DisplayName("닉네임 변경 시 이미 닉네임이 존재하는 경우 예외 발생") - public void updateNicknameWhenAlreadyExist() throws Exception { + @DisplayName("회원 정보 변경 시 이미 닉네임이 존재하는 경우 예외 발생") + public void updateMemberWhenNicknameAlreadyExist() throws Exception { // given final Long memberId = member.getId(); + final String newProfileImageObjectKey = "new.jpg"; + final ProfileImage newProfileImage = ProfileImage.from(newProfileImageObjectKey); final String newNicknameValue = "newNick"; final Nickname newNickname = Nickname.from(newNicknameValue); - final MemberNicknameUpdateRequest request = new MemberNicknameUpdateRequest(newNicknameValue); + final Job newJob = Job.DESIGNER; + final MemberUpdateRequest request = new MemberUpdateRequest(newNicknameValue, newJob, newProfileImageObjectKey); // when doReturn(Optional.of(member)).when(memberRepository) @@ -172,7 +163,7 @@ public void updateNicknameWhenAlreadyExist() throws Exception { .existsByNickname(newNickname); // then - assertThatThrownBy(() -> memberService.updateNickname(authPrincipal, request)) + assertThatThrownBy(() -> memberService.updateMember(authPrincipal, request)) .isInstanceOf(DuplicatedNicknameException.class); } } \ No newline at end of file