From 1f7b5fe79746748dcc40d1e65148d9c2714e5be5 Mon Sep 17 00:00:00 2001 From: yb__char <68099546+char-yb@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:39:32 -0700 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/api/MemberController.java | 10 ++++++++ .../member/application/MemberService.java | 10 ++++++++ .../request/MemberProfileUpdateRequest.java | 8 +++++++ .../member/application/MemberServiceTest.java | 24 +++++++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 src/main/java/com/depromeet/stonebed/domain/member/dto/request/MemberProfileUpdateRequest.java diff --git a/src/main/java/com/depromeet/stonebed/domain/member/api/MemberController.java b/src/main/java/com/depromeet/stonebed/domain/member/api/MemberController.java index 60a3ab5f..68f83dab 100644 --- a/src/main/java/com/depromeet/stonebed/domain/member/api/MemberController.java +++ b/src/main/java/com/depromeet/stonebed/domain/member/api/MemberController.java @@ -2,6 +2,7 @@ import com.depromeet.stonebed.domain.member.application.MemberService; import com.depromeet.stonebed.domain.member.domain.Member; +import com.depromeet.stonebed.domain.member.dto.request.MemberProfileUpdateRequest; import com.depromeet.stonebed.domain.member.dto.request.NicknameCheckRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -10,6 +11,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -28,6 +30,14 @@ public Member memberInfo() { return memberService.findMemberInfo(); } + @Operation(summary = "회원 프로필 변경", description = "회원 프로필을 변경합니다.") + @PutMapping("/me") + public ResponseEntity memberProfileModify( + @Valid @RequestBody MemberProfileUpdateRequest request) { + memberService.modifyMemberProfile(request); + return ResponseEntity.ok().build(); + } + @Operation(summary = "닉네임 유효성 체크", description = "닉네임 유효성 체크를 진행합니다.") @PostMapping("/check-nickname") public ResponseEntity memberNicknameCheck( 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 b49535e2..d1357764 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 @@ -1,6 +1,9 @@ package com.depromeet.stonebed.domain.member.application; +import com.depromeet.stonebed.domain.member.dao.MemberRepository; import com.depromeet.stonebed.domain.member.domain.Member; +import com.depromeet.stonebed.domain.member.domain.Profile; +import com.depromeet.stonebed.domain.member.dto.request.MemberProfileUpdateRequest; import com.depromeet.stonebed.domain.member.dto.request.NicknameCheckRequest; import com.depromeet.stonebed.global.util.MemberUtil; import lombok.RequiredArgsConstructor; @@ -13,6 +16,7 @@ public class MemberService { private final MemberUtil memberUtil; + private final MemberRepository memberRepository; @Transactional(readOnly = true) public Member findMemberInfo() { @@ -23,4 +27,10 @@ public Member findMemberInfo() { public void checkNickname(NicknameCheckRequest request) { memberUtil.checkNickname(request); } + + public void modifyMemberProfile(MemberProfileUpdateRequest request) { + Member member = memberUtil.getCurrentMember(); + Profile profile = Profile.createProfile(request.nickname(), request.profileImageUrl()); + member.updateProfile(profile); + } } diff --git a/src/main/java/com/depromeet/stonebed/domain/member/dto/request/MemberProfileUpdateRequest.java b/src/main/java/com/depromeet/stonebed/domain/member/dto/request/MemberProfileUpdateRequest.java new file mode 100644 index 00000000..c188be78 --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/member/dto/request/MemberProfileUpdateRequest.java @@ -0,0 +1,8 @@ +package com.depromeet.stonebed.domain.member.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; + +public record MemberProfileUpdateRequest( + @Schema(description = "변경할 닉네임", example = "왈왈멍") String nickname, + @Schema(description = "변경할 프로필 이미지 URL", example = "https://example.com/profile.jpg") + String profileImageUrl) {} 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 5db9de4c..ea8a3196 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 @@ -5,6 +5,8 @@ import com.depromeet.stonebed.FixtureMonkeySetUp; import com.depromeet.stonebed.domain.member.domain.Member; +import com.depromeet.stonebed.domain.member.domain.Profile; +import com.depromeet.stonebed.domain.member.dto.request.MemberProfileUpdateRequest; import com.depromeet.stonebed.domain.member.dto.request.NicknameCheckRequest; import com.depromeet.stonebed.global.util.MemberUtil; import org.junit.jupiter.api.Test; @@ -48,4 +50,26 @@ class MemberServiceTest extends FixtureMonkeySetUp { // then verify(memberUtil).checkNickname(request); } + + @Test + void 사용자_프로필을_수정한다() { + // given + Member member = fixtureMonkey.giveMeOne(Member.class); + when(memberUtil.getCurrentMember()).thenReturn(member); + + String nickname = fixtureMonkey.giveMeOne(String.class); + String profileImageUrl = fixtureMonkey.giveMeOne(String.class); + MemberProfileUpdateRequest request = + new MemberProfileUpdateRequest(nickname, profileImageUrl); + + // when + memberService.modifyMemberProfile(request); + + // then + verify(memberUtil).getCurrentMember(); + + Profile updatedProfile = member.getProfile(); + assertEquals(nickname, updatedProfile.getNickname()); + assertEquals(profileImageUrl, updatedProfile.getProfileImageUrl()); + } }