diff --git a/src/main/java/com/moongeul/backend/api/member/service/MemberService.java b/src/main/java/com/moongeul/backend/api/member/service/MemberService.java index c81139c..0b3ff20 100644 --- a/src/main/java/com/moongeul/backend/api/member/service/MemberService.java +++ b/src/main/java/com/moongeul/backend/api/member/service/MemberService.java @@ -294,8 +294,15 @@ public void withdraw(String email, WithdrawalRequestDTO withdrawalRequestDTO) { doneReadBookshelfRepository.deleteAllByMemberId(member.getId()); wishReadBookshelfRepository.deleteAllByMemberId(member.getId()); + // [스토리] 삭제 + storyRepository.deleteAllByMemberId(member.getId()); + + // [좋아요] 삭제 + likeRepository.deleteAllByMemberId(member.getId()); // 내가 누른 좋아요 + likeRepository.deleteByPostMemberId(member.getId()); // 내가 쓴 글에 눌린 좋아요 + // [게시글 & 인용구] - quoteRepository.deleteAllByMemberId(member.getId()); // Post 이전에 삭제 + quoteRepository.deleteAllByMemberId(member.getId()); // Post 이전에 삭제(quote) postRepository.deleteAllByMemberId(member.getId()); // [카테고리] Post가 모두 삭제된 후 삭제 가능 diff --git a/src/main/java/com/moongeul/backend/api/post/repository/LikeRepository.java b/src/main/java/com/moongeul/backend/api/post/repository/LikeRepository.java index 4262888..ac943cd 100644 --- a/src/main/java/com/moongeul/backend/api/post/repository/LikeRepository.java +++ b/src/main/java/com/moongeul/backend/api/post/repository/LikeRepository.java @@ -3,6 +3,9 @@ import com.moongeul.backend.api.post.entity.LikeType; import com.moongeul.backend.api.post.entity.Likes; 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 java.util.List; import java.util.Optional; @@ -17,4 +20,15 @@ public interface LikeRepository extends JpaRepository { // 특정 게시글의 모든 공감 조회 List findByPostId(Long postId); + + // 회원 탈퇴 시 삭제 + // 1. 내가 누른 좋아요 삭제 (member_id 기준) + @Modifying(clearAutomatically = true) + @Query("DELETE FROM Likes l WHERE l.member.id = :memberId") + void deleteAllByMemberId(@Param("memberId") Long memberId); + + // 2. 내가 쓴 게시글에 대한 타인의 좋아요 삭제 (post의 member_id 기준) + @Modifying(clearAutomatically = true) + @Query("DELETE FROM Likes l WHERE l.post.id IN (SELECT p.id FROM Post p WHERE p.member.id = :memberId)") + void deleteByPostMemberId(@Param("memberId") Long memberId); } diff --git a/src/main/java/com/moongeul/backend/api/question/dto/AnswerDTO.java b/src/main/java/com/moongeul/backend/api/question/dto/AnswerDTO.java index 639a99b..6b05a21 100644 --- a/src/main/java/com/moongeul/backend/api/question/dto/AnswerDTO.java +++ b/src/main/java/com/moongeul/backend/api/question/dto/AnswerDTO.java @@ -26,6 +26,7 @@ public class AnswerDTO { @NoArgsConstructor @AllArgsConstructor public static class MemberInfo { + private Long memberId; private String profileImage; // 프로필 이미지 private String nickname; // 닉네임 private ReadingTasteType readingTasteType; // 독서 취향 유형 diff --git a/src/main/java/com/moongeul/backend/api/question/service/AnswerService.java b/src/main/java/com/moongeul/backend/api/question/service/AnswerService.java index 23f43fb..5a7a0c2 100644 --- a/src/main/java/com/moongeul/backend/api/question/service/AnswerService.java +++ b/src/main/java/com/moongeul/backend/api/question/service/AnswerService.java @@ -151,6 +151,7 @@ private AnswerDTO convertToAnswerDTO(Answer answer, String email) { .createdAt(answer.getCreatedAt()) .myAnswer(isMyAnswer) .memberInfo(AnswerDTO.MemberInfo.builder() + .memberId(member.getId()) .profileImage(member.getProfileImage()) .nickname(member.getNickname()) .readingTasteType(member.getReadingTasteType()) diff --git a/src/main/java/com/moongeul/backend/api/story/repository/StoryRepository.java b/src/main/java/com/moongeul/backend/api/story/repository/StoryRepository.java index a745bdf..052a772 100644 --- a/src/main/java/com/moongeul/backend/api/story/repository/StoryRepository.java +++ b/src/main/java/com/moongeul/backend/api/story/repository/StoryRepository.java @@ -4,6 +4,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; @@ -51,4 +52,9 @@ Page findAllFollowerStories( // postId로 스토리 조회 Optional findByPostId(Long postId); + + // 회원 탈퇴 시 작성한 모든 스토리 삭제 + @Modifying(clearAutomatically = true) + @Query("DELETE FROM Story s WHERE s.member.id = :memberId") + void deleteAllByMemberId(@Param("memberId") Long memberId); }