Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 5 additions & 14 deletions src/main/java/ject/componote/domain/auth/api/MemberController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -33,18 +32,10 @@ public ResponseEntity<MemberSummaryResponse> getMemberSummary(@Authenticated fin
);
}

@PutMapping("/profile-image")
public ResponseEntity<Void> updateProfileImage(@Authenticated final AuthPrincipal authPrincipal,
@RequestBody @Valid final MemberProfileImageUpdateRequest request) {
memberService.updateProfileImage(authPrincipal, request);
return ResponseEntity.noContent()
.build();
}

@PutMapping("/nickname")
public ResponseEntity<Void> updateNickname(@Authenticated final AuthPrincipal authPrincipal,
@RequestBody @Valid final MemberNicknameUpdateRequest request) {
memberService.updateNickname(authPrincipal, request);
@PutMapping
public ResponseEntity<Void> updateMember(@Authenticated final AuthPrincipal authPrincipal,
@RequestBody @Valid final MemberUpdateRequest request) {
memberService.updateMember(authPrincipal, request);
return ResponseEntity.noContent()
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand All @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/ject/componote/domain/auth/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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);
}
}