diff --git a/src/main/java/com/example/FixLog/controller/MypagePostController.java b/src/main/java/com/example/FixLog/controller/MypagePostController.java index c928095..4635ef6 100644 --- a/src/main/java/com/example/FixLog/controller/MypagePostController.java +++ b/src/main/java/com/example/FixLog/controller/MypagePostController.java @@ -33,4 +33,18 @@ public ResponseEntity>> getMyPos return ResponseEntity.ok(Response.success("내가 작성한 글 보기 성공", data)); } + // 내가 좋아요한 글 + @GetMapping("/likes") + public ResponseEntity>> getLikedPosts( + @AuthenticationPrincipal UserDetails userDetails, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "4") int size, + @RequestParam(defaultValue = "0") int sort) { + + String email = userDetails.getUsername(); + PageResponseDto result = mypagePostService.getLikedPosts(email, page, sort, size); + return ResponseEntity.ok(Response.success("내가 좋아요한 글 보기 성공", result)); + } + + } diff --git a/src/main/java/com/example/FixLog/repository/like/PostLikeRepository.java b/src/main/java/com/example/FixLog/repository/like/PostLikeRepository.java index 8d35d8b..301f1ec 100644 --- a/src/main/java/com/example/FixLog/repository/like/PostLikeRepository.java +++ b/src/main/java/com/example/FixLog/repository/like/PostLikeRepository.java @@ -3,10 +3,13 @@ import com.example.FixLog.domain.like.PostLike; import com.example.FixLog.domain.member.Member; import com.example.FixLog.domain.post.Post; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface PostLikeRepository extends JpaRepository { Optional findByUserIdAndPostId(Member userId, Post postId); + Page findByUserId(Member user, Pageable pageable); } diff --git a/src/main/java/com/example/FixLog/repository/post/PostRepository.java b/src/main/java/com/example/FixLog/repository/post/PostRepository.java index e8c7c33..e0dd7bc 100644 --- a/src/main/java/com/example/FixLog/repository/post/PostRepository.java +++ b/src/main/java/com/example/FixLog/repository/post/PostRepository.java @@ -16,5 +16,5 @@ public interface PostRepository extends JpaRepository { Page findAllByOrderByPostLikesDesc(Pageable pageable); @EntityGraph(attributePaths = {"postLikes"}) - Page findByUserId(Member userId, Pageable pageable); + Page findByUserId(Member userId, Pageable pageable); // 좋아요수 때문 } diff --git a/src/main/java/com/example/FixLog/service/MypagePostService.java b/src/main/java/com/example/FixLog/service/MypagePostService.java index 7e46619..b9aa201 100644 --- a/src/main/java/com/example/FixLog/service/MypagePostService.java +++ b/src/main/java/com/example/FixLog/service/MypagePostService.java @@ -1,5 +1,6 @@ package com.example.FixLog.service; +import com.example.FixLog.domain.like.PostLike; import com.example.FixLog.domain.member.Member; import com.example.FixLog.domain.post.Post; import com.example.FixLog.dto.PageResponseDto; @@ -8,6 +9,7 @@ import com.example.FixLog.exception.ErrorCode; import com.example.FixLog.repository.MemberRepository; import com.example.FixLog.repository.fork.ForkRepository; +import com.example.FixLog.repository.like.PostLikeRepository; import com.example.FixLog.repository.post.PostRepository; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -25,17 +27,19 @@ public class MypagePostService { private final PostRepository postRepository; private final MemberRepository memberRepository; private final ForkRepository forkRepository; + private final PostLikeRepository postLikeRepository; - public MypagePostService(PostRepository postRepository, MemberRepository memberRepository, ForkRepository forkRepository) { + public MypagePostService(PostRepository postRepository, MemberRepository memberRepository, ForkRepository forkRepository, PostLikeRepository postLikeRepository) { this.postRepository = postRepository; this.memberRepository = memberRepository; this.forkRepository = forkRepository; + this.postLikeRepository = postLikeRepository; } // 내가 쓴 글 보기 public PageResponseDto getMyPosts(String email, int page, int sort, int size) { Member member = memberRepository.findByEmail(email) - .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); + .orElseThrow(() -> new CustomException(ErrorCode.USER_EMAIL_NOT_FOUND)); // 1: 오래된순, 0: 최신순 Sort.Direction direction = (sort == 1) ? Sort.Direction.ASC : Sort.Direction.DESC; @@ -57,4 +61,31 @@ public PageResponseDto getMyPosts(String email, int page, ) ); } + + // 내가 좋아요한 글 보기 + public PageResponseDto getLikedPosts(String email, int page, int sort, int size) { + Member member = memberRepository.findByEmail(email) + .orElseThrow(() -> new CustomException(ErrorCode.USER_EMAIL_NOT_FOUND)); + + // 1: 오래된순, 0: 최신순 + Sort.Direction direction = (sort == 1) ? Sort.Direction.ASC : Sort.Direction.DESC; + Pageable pageable = PageRequest.of(page, size, Sort.by(direction, "postId.createdAt")); + + Page postLikePage = postLikeRepository.findByUserId(member, pageable); + List likedPosts = postLikePage.map(PostLike::getPostId).getContent(); + + // fork count 한번에 조회 + List forkCounts = forkRepository.countForksByOriginalPosts(likedPosts); + Map forkCountMap = forkCounts.stream() + .collect(Collectors.toMap( + row -> (Long) row[0], + row -> ((Long) row[1]).intValue() + )); + + return PageResponseDto.from(postLikePage.map(PostLike::getPostId), post -> + MyPostPageResponseDto.from(post, forkCountMap.getOrDefault(post.getPostId(), 0)) + ); + } + + }