From 71ef5087042c0384bfa51bc140c1c7dcb97505d4 Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:42:15 +0900 Subject: [PATCH 1/3] =?UTF-8?q?#339=20refactor=20:=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20=EB=B6=84=EB=A6=AC=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/MemberController.java | 8 +++++++- .../drinkeg/domain/member/service/JoinService.java | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java b/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java index 7d796c2c..ee83d084 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java @@ -10,7 +10,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; @@ -79,4 +78,11 @@ public ApiResponse checkUsername(@RequestBody UsernameChe UsernameCheckResponse usernameCheckResponse = joinService.isDuplicatedUsername(usernameCheckRequest); return ApiResponse.onSuccess(usernameCheckResponse); } + + @PostMapping("/member/profileImage") + @Operation(summary = "프로필 이미지 업로드", description = "프로필 이미지를 업로드합니다.") + public ApiResponse uploadProfileImage(@RequestPart("profileImg") MultipartFile profileImg, @AuthenticationPrincipal PrincipalDetail principalDetail) { + joinService.uploadProfileImage(profileImg, principalDetail.getUsername()); + return ApiResponse.onSuccess("프로필 이미지 업로드 성공"); + } } diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java b/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java index c80dfb7b..918016ba 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java @@ -86,4 +86,10 @@ public UsernameCheckResponse isDuplicatedUsername(UsernameCheckRequest usernameC return new UsernameCheckResponse(memberRepository.existsByUsername(usernameCheckRequest.username())); } + + public void uploadProfileImage(MultipartFile profileImg, String username) { + // 이미지 업로드 + // 멤버 프로필 이미지 변경 + // 기존 이미지 삭제 + } } \ No newline at end of file From 6a142ed74c84efe2b675afd9cf0dcad7020ef8e3 Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:06:34 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#339=20refactor=20:=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/MemberController.java | 6 +++--- .../drinkeg/domain/member/service/JoinService.java | 13 ++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java b/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java index ee83d084..aa8a4cd9 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java @@ -81,8 +81,8 @@ public ApiResponse checkUsername(@RequestBody UsernameChe @PostMapping("/member/profileImage") @Operation(summary = "프로필 이미지 업로드", description = "프로필 이미지를 업로드합니다.") - public ApiResponse uploadProfileImage(@RequestPart("profileImg") MultipartFile profileImg, @AuthenticationPrincipal PrincipalDetail principalDetail) { - joinService.uploadProfileImage(profileImg, principalDetail.getUsername()); - return ApiResponse.onSuccess("프로필 이미지 업로드 성공"); + public ApiResponse uploadProfileImage(@RequestPart(value = "profileImg") MultipartFile profileImg, @AuthenticationPrincipal PrincipalDetail principalDetail) { + String imageUrl = joinService.uploadProfileImage(profileImg, principalDetail.getUsername()); + return ApiResponse.onSuccess(imageUrl); } } diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java b/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java index 918016ba..bda59cfb 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java @@ -2,7 +2,6 @@ import com.drinkeg.drinkeg.domain.member.dto.*; import com.drinkeg.drinkeg.global.apipayLoad.code.status.ErrorStatus; -import com.drinkeg.drinkeg.domain.member.converter.MemberConverter; import com.drinkeg.drinkeg.domain.member.domain.Member; import com.drinkeg.drinkeg.domain.member.repostitory.MemberRepository; import com.drinkeg.drinkeg.global.exception.GeneralException; @@ -87,9 +86,13 @@ public UsernameCheckResponse isDuplicatedUsername(UsernameCheckRequest usernameC return new UsernameCheckResponse(memberRepository.existsByUsername(usernameCheckRequest.username())); } - public void uploadProfileImage(MultipartFile profileImg, String username) { - // 이미지 업로드 - // 멤버 프로필 이미지 변경 - // 기존 이미지 삭제 + public String uploadProfileImage(MultipartFile profileImg, String username) { + String profileImgUrl = storageService.uploadFile(profileImg, StoragePathName.MEMBER_PROFILE); + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); + if (member.getImageUrl() != null) + storageService.deleteFile(member.getImageUrl()); + member.updateImageUrl(profileImgUrl); + return profileImgUrl; } } \ No newline at end of file From 42c7d0bf627d9553a46e453657bd7305fa55ce55 Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:17:46 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#339=20refactor=20:=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=97=90=EC=84=9C=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/MemberController.java | 24 +++--- .../drinkeg/domain/member/domain/Member.java | 12 ++- .../member/dto/MemberUpdateRequest.java | 10 +-- .../member/repostitory/MemberRepository.java | 2 - .../domain/member/service/JoinService.java | 10 --- .../domain/member/service/MemberService.java | 7 +- .../member/service/MemberServiceImpl.java | 84 ++++++++----------- 7 files changed, 58 insertions(+), 91 deletions(-) diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java b/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java index aa8a4cd9..6fe53c5a 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/controller/MemberController.java @@ -32,6 +32,13 @@ public ApiResponse joinProcess(@RequestBody JoinDTO joinDTO) { return ApiResponse.onSuccess("회원가입 성공"); } + @DeleteMapping("/member/delete") + @Operation(summary = "사용자 탈퇴", description = "사용자 정보를 삭제합니다.") + public ApiResponse deleteProcess(@AuthenticationPrincipal PrincipalDetail principalDetail, HttpServletResponse response){ + memberService.deleteMemberByUsername(principalDetail.getUsername()); + tokenService.deleteRefreshTokenAndAccessToken(response, principalDetail.getUsername()); + return ApiResponse.onSuccess("회원 탈퇴 성공"); + } @PatchMapping("/member") @Operation(summary = "사용자 초기 정보 추가", description = "첫 로그인 여부에 따라 isFirst 속성이 true인 경우 사용자 초기 정보를 추가합니다.") @@ -41,17 +48,6 @@ public ApiResponse addMemberDetail(@RequestPart(value = "multipartFile", requ return ApiResponse.onSuccess("사용자 초기 정보 추가 완료"); } - @DeleteMapping("/member/delete") - @Operation(summary = "사용자 탈퇴", description = "사용자 정보를 삭제합니다.") - - public ApiResponse deleteProcess(@AuthenticationPrincipal PrincipalDetail principalDetail, HttpServletResponse response){ - memberService.deleteMemberByUsername(principalDetail.getUsername()); - tokenService.deleteRefreshTokenAndAccessToken(response, principalDetail.getUsername()); - return ApiResponse.onSuccess("회원 탈퇴 성공"); - - - } - @GetMapping("/member/info") @Operation(summary = "마이페이지 ", description = "유저 정보를 불러옵니다.") public ApiResponse getMemberInfo(@AuthenticationPrincipal PrincipalDetail principalDetail) { @@ -66,9 +62,9 @@ public ApiResponse checkNickname(@AuthenticationPrincipal Pri @PatchMapping("/member/info") @Operation(summary = "마이페이지 정보 수정 ", description = "마이페이지의 정보를 수정합니다.") - public ApiResponse updateMemberInfo(@AuthenticationPrincipal PrincipalDetail principalDetail, @RequestPart(value = "multipartFile", required = false) MultipartFile multipartFile, @RequestPart("memberUpdateRequest") MemberUpdateRequest memberUpdateRequest){ + public ApiResponse updateMemberInfo(@AuthenticationPrincipal PrincipalDetail principalDetail, @RequestBody MemberUpdateRequest memberUpdateRequest){ - memberService.updateMemberInfo(principalDetail,memberUpdateRequest, multipartFile); + memberService.updateMemberInfo(memberUpdateRequest, principalDetail.getUsername()); return ApiResponse.onSuccess("정보 수정 성공"); } @@ -82,7 +78,7 @@ public ApiResponse checkUsername(@RequestBody UsernameChe @PostMapping("/member/profileImage") @Operation(summary = "프로필 이미지 업로드", description = "프로필 이미지를 업로드합니다.") public ApiResponse uploadProfileImage(@RequestPart(value = "profileImg") MultipartFile profileImg, @AuthenticationPrincipal PrincipalDetail principalDetail) { - String imageUrl = joinService.uploadProfileImage(profileImg, principalDetail.getUsername()); + String imageUrl = memberService.uploadProfileImage(profileImg, principalDetail.getUsername()); return ApiResponse.onSuccess(imageUrl); } } diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/domain/Member.java b/src/main/java/com/drinkeg/drinkeg/domain/member/domain/Member.java index d31da9e5..76a7053b 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/domain/Member.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/domain/Member.java @@ -2,6 +2,7 @@ import com.drinkeg.drinkeg.domain.member.converter.StringListConverter; +import com.drinkeg.drinkeg.domain.member.dto.MemberUpdateRequest; import com.drinkeg.drinkeg.domain.myWine.domain.MyWine; import com.drinkeg.drinkeg.domain.member.enums.Provider; import com.drinkeg.drinkeg.domain.member.enums.Role; @@ -98,10 +99,15 @@ public Member(String name, String email, Role role, Provider provider, String us } + public void updateMemberInfo(MemberUpdateRequest memberUpdateRequest) { + if (memberUpdateRequest.getName() != null) name = memberUpdateRequest.getName(); + if (memberUpdateRequest.getRegion() != null) region = memberUpdateRequest.getRegion(); + } + public void updateEmail(String email) { this.email = email; }; - public void updateImageUrl(String imageUrl){this.imageUrl=imageUrl;}; - public void updateRegion(String region){this.region=region;}; - public void updateName(String name){this.name = name;}; + public void updateImageUrl(String imageUrl) { + if (imageUrl != null) this.imageUrl = imageUrl; + }; public static Member createMember(String username, String password, boolean isFirst) { return Member.builder() diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/dto/MemberUpdateRequest.java b/src/main/java/com/drinkeg/drinkeg/domain/member/dto/MemberUpdateRequest.java index 94612e5d..18ea14c8 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/dto/MemberUpdateRequest.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/dto/MemberUpdateRequest.java @@ -13,12 +13,6 @@ @AllArgsConstructor @NoArgsConstructor public class MemberUpdateRequest { - - private String username; - - private String city; - - - - + private String name; + private String region; } diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/repostitory/MemberRepository.java b/src/main/java/com/drinkeg/drinkeg/domain/member/repostitory/MemberRepository.java index a03380e5..44a5ff8e 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/repostitory/MemberRepository.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/repostitory/MemberRepository.java @@ -14,6 +14,4 @@ public interface MemberRepository extends JpaRepository{ boolean existsByName(String nickname); void deleteByUsername(String username); - - Member findMemberByUsername(String username); } diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java b/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java index bda59cfb..4bb3e908 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/service/JoinService.java @@ -85,14 +85,4 @@ public UsernameCheckResponse isDuplicatedUsername(UsernameCheckRequest usernameC return new UsernameCheckResponse(memberRepository.existsByUsername(usernameCheckRequest.username())); } - - public String uploadProfileImage(MultipartFile profileImg, String username) { - String profileImgUrl = storageService.uploadFile(profileImg, StoragePathName.MEMBER_PROFILE); - Member member = memberRepository.findByUsername(username) - .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); - if (member.getImageUrl() != null) - storageService.deleteFile(member.getImageUrl()); - member.updateImageUrl(profileImgUrl); - return profileImgUrl; - } } \ No newline at end of file diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberService.java b/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberService.java index 23532281..4a467c40 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberService.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberService.java @@ -8,9 +8,6 @@ import org.springframework.web.multipart.MultipartFile; public interface MemberService { - - public Member getMemberById(Long memberId); - public Member loadMemberByPrincipalDetail(PrincipalDetail principalDetail); public void deleteMemberByUsername(String username); @@ -19,5 +16,7 @@ public interface MemberService { public NameCheckResponse isNicknameAvailable(String nickname); - public void updateMemberInfo(PrincipalDetail principalDetail, MemberUpdateRequest memberUpdateRequest, MultipartFile multipartFile); + public void updateMemberInfo(MemberUpdateRequest memberUpdateRequest, String username); + + public String uploadProfileImage(MultipartFile multipartFile, String username); } diff --git a/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberServiceImpl.java b/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberServiceImpl.java index 99b381aa..f278472a 100644 --- a/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberServiceImpl.java +++ b/src/main/java/com/drinkeg/drinkeg/domain/member/service/MemberServiceImpl.java @@ -21,19 +21,13 @@ @Service @RequiredArgsConstructor +@Transactional(readOnly = true) public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; private final StorageService storageService; private final ApplicationEventPublisher eventPublisher; - @Override - public Member getMemberById(Long memberId) { - - return memberRepository.findById(memberId).orElseThrow(() - -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); - } - @Override public Member loadMemberByPrincipalDetail(PrincipalDetail principalDetail) { // 현재 로그인한 사용자 정보 가져오기 @@ -43,52 +37,42 @@ public Member loadMemberByPrincipalDetail(PrincipalDetail principalDetail) { -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); } - @Override - @Transactional - public void deleteMemberByUsername(String username){ - eventPublisher.publishEvent(new RemoveTastingNoteMemberEvent(username)); - memberRepository.deleteByUsername(username); - } - - @Override - public MemberInfoResponse showMemberInfo(String username){ - - Member member = memberRepository.findMemberByUsername(username); - - - - return MemberInfoResponse.create(member); - } - - @Override - public NameCheckResponse isNicknameAvailable(String nickname){ - - - return NameCheckResponse.create(!memberRepository.existsByName(nickname)); - } - - @Override - @Transactional - public void updateMemberInfo(PrincipalDetail principalDetail, MemberUpdateRequest memberUpdateRequest, MultipartFile multipartFile){ - - - Member member = loadMemberByPrincipalDetail(principalDetail); + @Override + @Transactional + public void deleteMemberByUsername(String username){ + eventPublisher.publishEvent(new RemoveTastingNoteMemberEvent(username)); + memberRepository.deleteByUsername(username); + } - if (multipartFile != null ) { + @Override + public MemberInfoResponse showMemberInfo(String username){ + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); + return MemberInfoResponse.create(member); + } - String profileImage = storageService.uploadFile(multipartFile, StoragePathName.MEMBER_PROFILE); + @Override + public NameCheckResponse isNicknameAvailable(String nickname){ + return NameCheckResponse.create(!memberRepository.existsByName(nickname)); + } - if (profileImage != null) { - member.updateImageUrl(profileImage); - } - } - if (memberUpdateRequest.getCity() != null) { - member.updateRegion(memberUpdateRequest.getCity()); - } + @Override + @Transactional + public void updateMemberInfo(MemberUpdateRequest memberUpdateRequest, String username){ + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); - if (memberUpdateRequest.getUsername() != null) { - member.updateName(memberUpdateRequest.getUsername()); - } + member.updateMemberInfo(memberUpdateRequest); + } - } + @Override + public String uploadProfileImage(MultipartFile profileImg, String username) { + String profileImgUrl = storageService.uploadFile(profileImg, StoragePathName.MEMBER_PROFILE); + Member member = memberRepository.findByUsername(username) + .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); + if (member.getImageUrl() != null) + storageService.deleteFile(member.getImageUrl()); + member.updateImageUrl(profileImgUrl); + return profileImgUrl; } +}