Skip to content

Commit af1ac06

Browse files
authored
Merge pull request #53 from FixLog/feature/#25-my-post-sm
2 parents e1d02a3 + 38a5e87 commit af1ac06

4 files changed

Lines changed: 51 additions & 3 deletions

File tree

src/main/java/com/example/FixLog/controller/MypagePostController.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,18 @@ public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getMyPos
3333
return ResponseEntity.ok(Response.success("내가 작성한 글 보기 성공", data));
3434
}
3535

36+
// 내가 좋아요한 글
37+
@GetMapping("/likes")
38+
public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getLikedPosts(
39+
@AuthenticationPrincipal UserDetails userDetails,
40+
@RequestParam(defaultValue = "0") int page,
41+
@RequestParam(defaultValue = "4") int size,
42+
@RequestParam(defaultValue = "0") int sort) {
43+
44+
String email = userDetails.getUsername();
45+
PageResponseDto<MyPostPageResponseDto> result = mypagePostService.getLikedPosts(email, page, sort, size);
46+
return ResponseEntity.ok(Response.success("내가 좋아요한 글 보기 성공", result));
47+
}
48+
49+
3650
}

src/main/java/com/example/FixLog/repository/like/PostLikeRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import com.example.FixLog.domain.like.PostLike;
44
import com.example.FixLog.domain.member.Member;
55
import com.example.FixLog.domain.post.Post;
6+
import org.springframework.data.domain.Page;
7+
import org.springframework.data.domain.Pageable;
68
import org.springframework.data.jpa.repository.JpaRepository;
79

810
import java.util.Optional;
911

1012
public interface PostLikeRepository extends JpaRepository<PostLike, Long> {
1113
Optional<PostLike> findByUserIdAndPostId(Member userId, Post postId);
14+
Page<PostLike> findByUserId(Member user, Pageable pageable);
1215
}

src/main/java/com/example/FixLog/repository/post/PostRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ public interface PostRepository extends JpaRepository<Post, Long> {
1616
Page<Post> findAllByOrderByPostLikesDesc(Pageable pageable);
1717

1818
@EntityGraph(attributePaths = {"postLikes"})
19-
Page<Post> findByUserId(Member userId, Pageable pageable);
19+
Page<Post> findByUserId(Member userId, Pageable pageable); // 좋아요수 때문
2020
}

src/main/java/com/example/FixLog/service/MypagePostService.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.example.FixLog.service;
22

3+
import com.example.FixLog.domain.like.PostLike;
34
import com.example.FixLog.domain.member.Member;
45
import com.example.FixLog.domain.post.Post;
56
import com.example.FixLog.dto.PageResponseDto;
@@ -8,6 +9,7 @@
89
import com.example.FixLog.exception.ErrorCode;
910
import com.example.FixLog.repository.MemberRepository;
1011
import com.example.FixLog.repository.fork.ForkRepository;
12+
import com.example.FixLog.repository.like.PostLikeRepository;
1113
import com.example.FixLog.repository.post.PostRepository;
1214
import org.springframework.data.domain.Page;
1315
import 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

Comments
 (0)