11package com .example .FixLog .service ;
22
3+ import com .example .FixLog .domain .like .PostLike ;
34import com .example .FixLog .domain .member .Member ;
45import com .example .FixLog .domain .post .Post ;
56import com .example .FixLog .dto .PageResponseDto ;
89import com .example .FixLog .exception .ErrorCode ;
910import com .example .FixLog .repository .MemberRepository ;
1011import com .example .FixLog .repository .fork .ForkRepository ;
12+ import com .example .FixLog .repository .like .PostLikeRepository ;
1113import com .example .FixLog .repository .post .PostRepository ;
1214import org .springframework .data .domain .Page ;
1315import org .springframework .data .domain .PageRequest ;
@@ -25,17 +27,19 @@ public class MypagePostService {
2527 private final PostRepository postRepository ;
2628 private final MemberRepository memberRepository ;
2729 private final ForkRepository forkRepository ;
30+ private final PostLikeRepository postLikeRepository ;
2831
29- public MypagePostService (PostRepository postRepository , MemberRepository memberRepository , ForkRepository forkRepository ) {
32+ public MypagePostService (PostRepository postRepository , MemberRepository memberRepository , ForkRepository forkRepository , PostLikeRepository postLikeRepository ) {
3033 this .postRepository = postRepository ;
3134 this .memberRepository = memberRepository ;
3235 this .forkRepository = forkRepository ;
36+ this .postLikeRepository = postLikeRepository ;
3337 }
3438
3539 // 내가 쓴 글 보기
3640 public PageResponseDto <MyPostPageResponseDto > getMyPosts (String email , int page , int sort , int size ) {
3741 Member member = memberRepository .findByEmail (email )
38- .orElseThrow (() -> new CustomException (ErrorCode .MEMBER_NOT_FOUND ));
42+ .orElseThrow (() -> new CustomException (ErrorCode .USER_EMAIL_NOT_FOUND ));
3943
4044 // 1: 오래된순, 0: 최신순
4145 Sort .Direction direction = (sort == 1 ) ? Sort .Direction .ASC : Sort .Direction .DESC ;
@@ -57,4 +61,31 @@ public PageResponseDto<MyPostPageResponseDto> getMyPosts(String email, int page,
5761 )
5862 );
5963 }
64+
65+ // 내가 좋아요한 글 보기
66+ public PageResponseDto <MyPostPageResponseDto > getLikedPosts (String email , int page , int sort , int size ) {
67+ Member member = memberRepository .findByEmail (email )
68+ .orElseThrow (() -> new CustomException (ErrorCode .USER_EMAIL_NOT_FOUND ));
69+
70+ // 1: 오래된순, 0: 최신순
71+ Sort .Direction direction = (sort == 1 ) ? Sort .Direction .ASC : Sort .Direction .DESC ;
72+ Pageable pageable = PageRequest .of (page , size , Sort .by (direction , "postId.createdAt" ));
73+
74+ Page <PostLike > postLikePage = postLikeRepository .findByUserId (member , pageable );
75+ List <Post > likedPosts = postLikePage .map (PostLike ::getPostId ).getContent ();
76+
77+ // fork count 한번에 조회
78+ List <Object []> forkCounts = forkRepository .countForksByOriginalPosts (likedPosts );
79+ Map <Long , Integer > forkCountMap = forkCounts .stream ()
80+ .collect (Collectors .toMap (
81+ row -> (Long ) row [0 ],
82+ row -> ((Long ) row [1 ]).intValue ()
83+ ));
84+
85+ return PageResponseDto .from (postLikePage .map (PostLike ::getPostId ), post ->
86+ MyPostPageResponseDto .from (post , forkCountMap .getOrDefault (post .getPostId (), 0 ))
87+ );
88+ }
89+
90+
6091}
0 commit comments