Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,18 @@ public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getMyPos
return ResponseEntity.ok(Response.success("내가 작성한 글 보기 성공", data));
}

// 내가 좋아요한 글
@GetMapping("/likes")
public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getLikedPosts(
@AuthenticationPrincipal UserDetails userDetails,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "4") int size,
@RequestParam(defaultValue = "0") int sort) {

String email = userDetails.getUsername();
PageResponseDto<MyPostPageResponseDto> result = mypagePostService.getLikedPosts(email, page, sort, size);
return ResponseEntity.ok(Response.success("내가 좋아요한 글 보기 성공", result));
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -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<PostLike, Long> {
Optional<PostLike> findByUserIdAndPostId(Member userId, Post postId);
Page<PostLike> findByUserId(Member user, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ public interface PostRepository extends JpaRepository<Post, Long> {
Page<Post> findAllByOrderByPostLikesDesc(Pageable pageable);

@EntityGraph(attributePaths = {"postLikes"})
Page<Post> findByUserId(Member userId, Pageable pageable);
Page<Post> findByUserId(Member userId, Pageable pageable); // 좋아요수 때문
}
35 changes: 33 additions & 2 deletions src/main/java/com/example/FixLog/service/MypagePostService.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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<MyPostPageResponseDto> 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;
Expand All @@ -57,4 +61,31 @@ public PageResponseDto<MyPostPageResponseDto> getMyPosts(String email, int page,
)
);
}

// 내가 좋아요한 글 보기
public PageResponseDto<MyPostPageResponseDto> 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<PostLike> postLikePage = postLikeRepository.findByUserId(member, pageable);
List<Post> likedPosts = postLikePage.map(PostLike::getPostId).getContent();

// fork count 한번에 조회
List<Object[]> forkCounts = forkRepository.countForksByOriginalPosts(likedPosts);
Map<Long, Integer> 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))
);
}


}