From a71f3568f8c47eba4b27f47610a9929be80b916c Mon Sep 17 00:00:00 2001 From: 5jisoo <56earls@gmail.com> Date: Mon, 8 Jan 2024 21:21:32 +0900 Subject: [PATCH 1/3] =?UTF-8?q?#41=20Feat:=20=EA=B3=84=EC=A0=95=20?= =?UTF-8?q?=ED=83=88=ED=87=B4=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/MemberController.java | 9 +++++++++ .../unibond/member/service/MemberService.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java b/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java index 5081a9d..844b984 100644 --- a/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java +++ b/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java @@ -59,6 +59,15 @@ public BaseResponse getMemberDetail(@PathVariable("memberId") Long memberId, } } + @DeleteMapping("/api/v1/members") + public BaseResponse modifyMemberInfo(@RequestHeader("Authorization") Long loginId) { + try { + return new BaseResponse<>(memberService.deleteMember()); + } catch (BaseException e) { + return new BaseResponse<>(e.getStatus()); + } + } + @PatchMapping("/api/v1/members/{memberId}") public BaseResponse modifyMemberInfo(@PathVariable("memberId") Long memberId, @RequestBody(required = false) MemberModifyReqDto request, diff --git a/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java b/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java index 19c5b2e..c6ad4e0 100644 --- a/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java +++ b/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java @@ -1,6 +1,7 @@ package com.unibond.unibond.member.service; import com.unibond.unibond.block.repository.MemberBlockRepository; +import com.unibond.unibond.common.BaseEntityStatus; import com.unibond.unibond.common.BaseException; import com.unibond.unibond.common.BaseResponseStatus; import com.unibond.unibond.common.service.LoginInfoService; @@ -21,6 +22,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import static com.unibond.unibond.common.BaseEntityStatus.*; import static com.unibond.unibond.common.BaseResponseStatus.*; @Service @@ -156,6 +158,19 @@ public MemberDetailResDto getMemberInfo(Long memberId, Pageable pageable) throws } } + @Transactional + public BaseResponseStatus deleteMember() throws BaseException{ + try { + Member loginMember = loginInfoService.getLoginMember(); + loginMember.setStatus(DELETED); + return SUCCESS; + } catch (BaseException e) { + throw e; + } catch (Exception e) { + throw new BaseException(DATABASE_ERROR); + } + } + private MemberDetailResDto getMyProfileInfo(Long memberId) throws BaseException { Member member = memberRepository.findMemberByIdFetchJoinDisease(memberId) .orElseThrow(() -> new BaseException(INVALID_MEMBER_ID)); From 46ed5243d7e6893c109364aac4fc998dbc7e5e05 Mon Sep 17 00:00:00 2001 From: 5jisoo <56earls@gmail.com> Date: Mon, 8 Jan 2024 22:29:25 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#41=20Feat:=20=EC=97=B0=EA=B4=80=EB=90=9C?= =?UTF-8?q?=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=82=AD=EC=A0=9C=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20-=20bulk=20delete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comment/repository/CommentRepository.java | 6 ++++++ .../disease/repository/DiseaseRepository.java | 5 +++-- .../unibond/disease/service/DiseaseService.java | 11 +++++------ .../letter/repository/LetterRepository.java | 5 +++++ .../repository/LetterRoomRepository.java | 12 +++++------- .../unibond/member/service/MemberService.java | 16 +++++++++++++--- .../unibond/post/repository/PostRepository.java | 7 +++++++ 7 files changed, 44 insertions(+), 18 deletions(-) diff --git a/unibond/src/main/java/com/unibond/unibond/comment/repository/CommentRepository.java b/unibond/src/main/java/com/unibond/unibond/comment/repository/CommentRepository.java index 81b1449..2004be8 100644 --- a/unibond/src/main/java/com/unibond/unibond/comment/repository/CommentRepository.java +++ b/unibond/src/main/java/com/unibond/unibond/comment/repository/CommentRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -45,4 +46,9 @@ Page findParentCommentsByPostFetchOwner(@Param("post") Post post, "where c.post = :post and c.status = 'ACTIVE' and mb.id IS NULL ") Integer getCommentCountByPost(@Param("post") Post post, @Param("loginId") Long loginId); + + @Modifying + @Query("update Comment c set c.status = 'DELETED' " + + "where c.member.id = :memberId ") + void bulkDeleteByMember(@Param("memberId") Long memberId); } diff --git a/unibond/src/main/java/com/unibond/unibond/disease/repository/DiseaseRepository.java b/unibond/src/main/java/com/unibond/unibond/disease/repository/DiseaseRepository.java index 41be5fd..ad8fbe8 100644 --- a/unibond/src/main/java/com/unibond/unibond/disease/repository/DiseaseRepository.java +++ b/unibond/src/main/java/com/unibond/unibond/disease/repository/DiseaseRepository.java @@ -1,5 +1,6 @@ package com.unibond.unibond.disease.repository; +import com.unibond.unibond.common.BaseEntityStatus; import com.unibond.unibond.disease.domain.Disease; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -10,6 +11,6 @@ @Repository public interface DiseaseRepository extends JpaRepository { - Page findFirst5ByDiseaseNameKorContains(String query, Pageable pageable); - Page findFirst5ByDiseaseNameEngContains(String query, Pageable pageable); + Page findFirst5ByDiseaseNameKorContainsAndStatus(String query, BaseEntityStatus status, Pageable pageable); + Page findFirst5ByDiseaseNameEngContainsAndStatus(String query, BaseEntityStatus status, Pageable pageable); } diff --git a/unibond/src/main/java/com/unibond/unibond/disease/service/DiseaseService.java b/unibond/src/main/java/com/unibond/unibond/disease/service/DiseaseService.java index 2b3afb0..8dcf954 100644 --- a/unibond/src/main/java/com/unibond/unibond/disease/service/DiseaseService.java +++ b/unibond/src/main/java/com/unibond/unibond/disease/service/DiseaseService.java @@ -1,7 +1,6 @@ package com.unibond.unibond.disease.service; import com.unibond.unibond.common.BaseException; -import com.unibond.unibond.common.BaseResponseStatus; import com.unibond.unibond.disease.domain.Disease; import com.unibond.unibond.disease.dto.SearchDiseaseResDto; import com.unibond.unibond.disease.repository.DiseaseRepository; @@ -10,9 +9,9 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import java.util.List; - -import static com.unibond.unibond.common.BaseResponseStatus.*; +import static com.unibond.unibond.common.BaseEntityStatus.ACTIVE; +import static com.unibond.unibond.common.BaseResponseStatus.DATABASE_ERROR; +import static com.unibond.unibond.common.BaseResponseStatus.NULL_SEARCH_LAN; @RequiredArgsConstructor @Service @@ -25,9 +24,9 @@ public SearchDiseaseResDto searchDisease(String language, String searchWord, Pag Page searchedDiseaseList; if (language.equals("kor")) { - searchedDiseaseList = diseaseRepository.findFirst5ByDiseaseNameKorContains(searchWord, pageable); + searchedDiseaseList = diseaseRepository.findFirst5ByDiseaseNameKorContainsAndStatus(searchWord, ACTIVE, pageable); } else if (language.equals("eng")) { - searchedDiseaseList = diseaseRepository.findFirst5ByDiseaseNameEngContains(searchWord, pageable); + searchedDiseaseList = diseaseRepository.findFirst5ByDiseaseNameEngContainsAndStatus(searchWord, ACTIVE, pageable); } else { throw new BaseException(NULL_SEARCH_LAN); } diff --git a/unibond/src/main/java/com/unibond/unibond/letter/repository/LetterRepository.java b/unibond/src/main/java/com/unibond/unibond/letter/repository/LetterRepository.java index 5cc392d..e80c272 100644 --- a/unibond/src/main/java/com/unibond/unibond/letter/repository/LetterRepository.java +++ b/unibond/src/main/java/com/unibond/unibond/letter/repository/LetterRepository.java @@ -53,4 +53,9 @@ Boolean hasSentLetterToSamePersonWithinHour(@Param("sender") Long senderId, @Par @Query("update Letter l set l.letterStatus = 'ARRIVED' " + "where l.createdDate <= :currentTimeMinusOneHour and l.letterStatus = 'SENDING'") void bulkSendLetter(@Param("currentTimeMinusOneHour") LocalDateTime currentTime); + + @Modifying + @Query("update Letter l set l.status = 'DELETED' " + + "where l.sender.id = :memberId or l.receiver.id = :memberId ") + void bulkDeleteByMember(@Param("memberId") Long memberId); } diff --git a/unibond/src/main/java/com/unibond/unibond/letter_room/repository/LetterRoomRepository.java b/unibond/src/main/java/com/unibond/unibond/letter_room/repository/LetterRoomRepository.java index 7c5ad36..8aa3c6d 100644 --- a/unibond/src/main/java/com/unibond/unibond/letter_room/repository/LetterRoomRepository.java +++ b/unibond/src/main/java/com/unibond/unibond/letter_room/repository/LetterRoomRepository.java @@ -5,6 +5,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -23,11 +24,8 @@ public interface LetterRoomRepository extends JpaRepository { Optional findLetterRoomBy2Member(@Param("member1") Member member1, @Param("member2") Member member2); - @Query("select l from LetterRoom l " + - "join fetch l.member1 " + - "join fetch l.member1.disease " + - "join fetch l.member2 " + - "join fetch l.member2.disease " + - "where l.id = :letterRoomId ") - Optional findByIdFetch2Member(@Param("letterRoomId") Long letterRoomId); + @Modifying + @Query("update LetterRoom lr set lr.status = 'DELETED' " + + "where lr.member1.id = :memberId or lr.member2.id = :memberId ") + void bulkDeleteByMember(@Param("memberId") Long memberId); } diff --git a/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java b/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java index c6ad4e0..c7e3a88 100644 --- a/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java +++ b/unibond/src/main/java/com/unibond/unibond/member/service/MemberService.java @@ -1,13 +1,15 @@ package com.unibond.unibond.member.service; import com.unibond.unibond.block.repository.MemberBlockRepository; -import com.unibond.unibond.common.BaseEntityStatus; +import com.unibond.unibond.comment.repository.CommentRepository; import com.unibond.unibond.common.BaseException; import com.unibond.unibond.common.BaseResponseStatus; import com.unibond.unibond.common.service.LoginInfoService; import com.unibond.unibond.common.service.S3Uploader; import com.unibond.unibond.disease.domain.Disease; import com.unibond.unibond.disease.repository.DiseaseRepository; +import com.unibond.unibond.letter.repository.LetterRepository; +import com.unibond.unibond.letter_room.repository.LetterRoomRepository; import com.unibond.unibond.member.domain.Member; import com.unibond.unibond.member.dto.MemberDetailResDto; import com.unibond.unibond.member.dto.MemberModifyReqDto; @@ -22,7 +24,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import static com.unibond.unibond.common.BaseEntityStatus.*; +import static com.unibond.unibond.common.BaseEntityStatus.DELETED; import static com.unibond.unibond.common.BaseResponseStatus.*; @Service @@ -34,6 +36,9 @@ public class MemberService { private final MemberBlockRepository memberBlockRepository; private final DiseaseRepository diseaseRepository; private final PostRepository postRepository; + private final CommentRepository commentRepository; + private final LetterRepository letterRepository; + private final LetterRoomRepository letterRoomRepository; @Transactional public Long signupWithNoProfileImg(MemberRegisterReqDto registerReqDto) throws BaseException { @@ -159,10 +164,15 @@ public MemberDetailResDto getMemberInfo(Long memberId, Pageable pageable) throws } @Transactional - public BaseResponseStatus deleteMember() throws BaseException{ + public BaseResponseStatus deleteMember() throws BaseException { try { Member loginMember = loginInfoService.getLoginMember(); loginMember.setStatus(DELETED); + Long loginId = loginMember.getId(); + commentRepository.bulkDeleteByMember(loginId); + letterRepository.bulkDeleteByMember(loginId); + letterRoomRepository.bulkDeleteByMember(loginId); + postRepository.bulkDeleteByMember(loginId); return SUCCESS; } catch (BaseException e) { throw e; diff --git a/unibond/src/main/java/com/unibond/unibond/post/repository/PostRepository.java b/unibond/src/main/java/com/unibond/unibond/post/repository/PostRepository.java index fd36bf8..0fbc0de 100644 --- a/unibond/src/main/java/com/unibond/unibond/post/repository/PostRepository.java +++ b/unibond/src/main/java/com/unibond/unibond/post/repository/PostRepository.java @@ -6,10 +6,12 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.time.LocalDateTime; import java.util.Optional; @Repository @@ -40,4 +42,9 @@ Page findPostsByBoardType(@Param("boardType") BoardType boardType, Page findPostsByMember(@Param("member") Member member, @Param("loginId") Long loginId, Pageable pageable); + + @Modifying + @Query("update Post p set p.status = 'DELETED' " + + "where p.owner.id = :memberId ") + void bulkDeleteByMember(@Param("memberId") Long memberId); } From ea4bda4288a871e3e3644f0fc317d602f184a971 Mon Sep 17 00:00:00 2001 From: 5jisoo <56earls@gmail.com> Date: Mon, 8 Jan 2024 22:46:04 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#41=20Chore:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/docs/experience-community.html | 20 ++++++++++++++++++- .../BOOT-INF/classes/static/docs/member.html | 4 ++-- .../static/docs/question-community.html | 20 ++++++++++++++++++- .../member/controller/MemberController.java | 2 +- .../static/docs/experience-community.html | 2 +- .../resources/static/docs/letter-rooms.html | 12 ++++++++--- .../main/resources/static/docs/member.html | 4 ++-- .../static/docs/question-community.html | 19 ++++++++++++++---- 8 files changed, 68 insertions(+), 15 deletions(-) diff --git a/unibond/BOOT-INF/classes/static/docs/experience-community.html b/unibond/BOOT-INF/classes/static/docs/experience-community.html index a605e99..4b8fec0 100644 --- a/unibond/BOOT-INF/classes/static/docs/experience-community.html +++ b/unibond/BOOT-INF/classes/static/docs/experience-community.html @@ -487,6 +487,24 @@

Request

+Name +Description + + + + +

Authorization

+

Basic auth credentials

+ + + + ++++ + + @@ -835,7 +853,7 @@

Response

diff --git a/unibond/BOOT-INF/classes/static/docs/member.html b/unibond/BOOT-INF/classes/static/docs/member.html index 535d429..b753fa8 100644 --- a/unibond/BOOT-INF/classes/static/docs/member.html +++ b/unibond/BOOT-INF/classes/static/docs/member.html @@ -563,7 +563,7 @@

Response

"isSuccess" : true, "code" : 1000, "message" : "요청에 성공하였습니다.", - "result" : 64 + "result" : 65 } @@ -1436,7 +1436,7 @@

Response

"code" : 1000, "message" : "요청에 성공하였습니다.", "result" : { - "profileImage" : "https://unibond-img-bucket.s3.ap-northeast-2.amazonaws.com/user/f35652bb-10a5-4de7-b560-707157e9a916test_profile_img.jpg", + "profileImage" : "https://unibond-img-bucket.s3.ap-northeast-2.amazonaws.com/user/dc45f826-fb80-46d9-9121-ae0a0816a9e4test_profile_img.jpg", "nickname" : "병원장", "gender" : "MALE", "diseaseName" : "1번 염색체 장완 21.3 부분의 미세결손 증후군", diff --git a/unibond/BOOT-INF/classes/static/docs/question-community.html b/unibond/BOOT-INF/classes/static/docs/question-community.html index 3fa0593..586c597 100644 --- a/unibond/BOOT-INF/classes/static/docs/question-community.html +++ b/unibond/BOOT-INF/classes/static/docs/question-community.html @@ -481,6 +481,24 @@

Request

+ + + + + + + + + + +
Parameter Description
NameDescription

Authorization

Basic auth credentials

+ ++++ + + @@ -668,7 +686,7 @@

Response

diff --git a/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java b/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java index 844b984..53ad6f2 100644 --- a/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java +++ b/unibond/src/main/java/com/unibond/unibond/member/controller/MemberController.java @@ -60,7 +60,7 @@ public BaseResponse getMemberDetail(@PathVariable("memberId") Long memberId, } @DeleteMapping("/api/v1/members") - public BaseResponse modifyMemberInfo(@RequestHeader("Authorization") Long loginId) { + public BaseResponse deleteMember(@RequestHeader("Authorization") Long loginId) { try { return new BaseResponse<>(memberService.deleteMember()); } catch (BaseException e) { diff --git a/unibond/src/main/resources/static/docs/experience-community.html b/unibond/src/main/resources/static/docs/experience-community.html index 4b8fec0..b0b5358 100644 --- a/unibond/src/main/resources/static/docs/experience-community.html +++ b/unibond/src/main/resources/static/docs/experience-community.html @@ -853,7 +853,7 @@

Response

diff --git a/unibond/src/main/resources/static/docs/letter-rooms.html b/unibond/src/main/resources/static/docs/letter-rooms.html index 144d771..8fac522 100644 --- a/unibond/src/main/resources/static/docs/letter-rooms.html +++ b/unibond/src/main/resources/static/docs/letter-rooms.html @@ -511,7 +511,7 @@

Response

HTTP/1.1 200 OK
 Content-Type: application/json
-Content-Length: 1248
+Content-Length: 1599
 
 {
   "isSuccess" : true,
@@ -519,6 +519,12 @@ 

Response

"message" : "요청에 성공하였습니다.", "result" : { "letterRoomList" : [ { + "senderProfileImg" : "https://unibond-img-bucket.s3.ap-northeast-2.amazonaws.com/user/025cc515-c832-4c29-9fe0-9e77f0afea7d6808929_emoji_emoticon_emotion_expression_face_icon.png", + "senderNick" : "서울의가을", + "senderId" : 28, + "recentLetterSentDate" : "2024-01-08T19:33:37.078678", + "letterRoomId" : 12 + }, { "senderProfileImg" : "https://unibond-img-bucket.s3.ap-northeast-2.amazonaws.com/user/3b6fc68f-808c-4e22-97e8-9447d6916bc5cat-2068462_640.jpg", "senderNick" : "눈송이네 베이킹", "senderId" : 30, @@ -538,10 +544,10 @@

Response

"letterRoomId" : 18 } ], "pageInfo" : { - "numberOfElements" : 3, + "numberOfElements" : 4, "lastPage" : true, "totalPages" : 1, - "totalElements" : 3, + "totalElements" : 4, "size" : 30 } } diff --git a/unibond/src/main/resources/static/docs/member.html b/unibond/src/main/resources/static/docs/member.html index b753fa8..c37a72e 100644 --- a/unibond/src/main/resources/static/docs/member.html +++ b/unibond/src/main/resources/static/docs/member.html @@ -563,7 +563,7 @@

Response

"isSuccess" : true, "code" : 1000, "message" : "요청에 성공하였습니다.", - "result" : 65 + "result" : 68 }
@@ -1436,7 +1436,7 @@

Response

"code" : 1000, "message" : "요청에 성공하였습니다.", "result" : { - "profileImage" : "https://unibond-img-bucket.s3.ap-northeast-2.amazonaws.com/user/dc45f826-fb80-46d9-9121-ae0a0816a9e4test_profile_img.jpg", + "profileImage" : "https://unibond-img-bucket.s3.ap-northeast-2.amazonaws.com/user/00f348b2-0669-4007-a6ff-6e4129b71023test_profile_img.jpg", "nickname" : "병원장", "gender" : "MALE", "diseaseName" : "1번 염색체 장완 21.3 부분의 미세결손 증후군", diff --git a/unibond/src/main/resources/static/docs/question-community.html b/unibond/src/main/resources/static/docs/question-community.html index 586c597..5b80b1b 100644 --- a/unibond/src/main/resources/static/docs/question-community.html +++ b/unibond/src/main/resources/static/docs/question-community.html @@ -517,7 +517,7 @@

Response

HTTP/1.1 200 OK
 Content-Type: application/json;charset=UTF-8
-Content-Length: 1437
+Content-Length: 2067
 
 {
   "isSuccess" : true,
@@ -525,10 +525,10 @@ 

Response

"message" : "요청에 성공하였습니다.", "result" : { "pageInfo" : { - "numberOfElements" : 2, + "numberOfElements" : 3, "lastPage" : true, "totalPages" : 1, - "totalElements" : 2, + "totalElements" : 3, "size" : 30 }, "postPreviewList" : [ { @@ -542,6 +542,17 @@

Response

"contentPreview" : "급하게 친구들끼리 여행을 가게 될 일이 생겼어요. 사실 이동하는 게 많이 어려워서", "boardType" : "QNA", "isEnd" : false + }, { + "createdDate" : "2023-11-12T00:57:12.641472", + "ownerId" : 28, + "ownerProfileImg" : "https://unibond-img-bucket.s3.ap-northeast-2.amazonaws.com/user/025cc515-c832-4c29-9fe0-9e77f0afea7d6808929_emoji_emoticon_emotion_expression_face_icon.png", + "ownerNick" : "서울의가을", + "disease" : "10번 염색체 장완 말단부의 단일염색체증", + "postId" : 62, + "postImg" : null, + "contentPreview" : "학교에 다니면서 친구들한테 어떻게 이 병에 대해 솔직하게 털어놨는지 다들 계기가 ", + "boardType" : "QNA", + "isEnd" : false }, { "createdDate" : "2023-10-03T00:41:51.650698", "ownerId" : 30, @@ -686,7 +697,7 @@

Response

Parameter Description