본문 바로가기
💻 뚝딱뚝딱/북북클럽

[개발일지 #032] 각종 피드 조회 (특정 회원의 피드 목록 조회, 특정 회원이 좋아요 누른 피드 목록 조회)

by 뚜루리 2025. 5. 2.
728x90
320x100

🎯 오늘 개발 할 기능

  • 특정 회원의 피드 목록 조회 구현
  • 특정 회원이 좋아요 누른 피드 목록 조회 구현

🛠️ 개발내용

📌  특정 회원의 피드 목록 조회 구현

  • 마이페이지 → “나의 피드”
  • 타인 프로필 → “이 사용자의 피드”

 

📦 FeedRepositoryCustom.java

List<Feed> findFeedsByUserId(Long userId, Pageable pageable);

 

📦 FeedRepositoryImpl.java

@Override
public List<Feed> findFeedsByUserId(Long userId, Pageable pageable) {
    return queryFactory.selectFrom(feed)
        .where(feed.user.id.eq(userId).and(feed.isBlinded.isFalse()))
        .orderBy(feed.createdAt.desc())
        .offset(pageable.getOffset())
        .limit(pageable.getPageSize())
        .fetch();
}

 

📦 FeedService.java

public List<FeedResponse> getFeedsByUser(Long userId, Pageable pageable, Long viewerId) {
    List<Feed> feeds = feedRepository.findFeedsByUserId(userId, pageable);
    return feeds.stream()
        .map(feed -> {
            long likeCount = likeService.getLikeCount(feed.getId());
            boolean liked = likeService.hasUserLiked(viewerId, feed.getId());
            return new FeedResponse(feed, likeCount, liked);
        }).toList();
}

 

 

📦 FeedController.java

@GetMapping("/user/{userId}")
public ResponseEntity<ApiResponse<List<FeedResponse>>> getFeedsByUser(
        @PathVariable Long userId,
        Pageable pageable,
        @AuthenticationPrincipal CustomUserDetails userDetails) {
    List<FeedResponse> feeds = feedService.getFeedsByUser(userId, pageable, userDetails.getUser().getId());
    return ResponseEntity.ok(ApiResponse.success(feeds));
}

 

[포스트맨으로 테스트하기]

GET /api/feeds/user/3?page=0&size=10

 

[테스트 결과 : 성공]

 

 


📌  특정 회원이 좋아요 누른 피드 목록 조회

  • 마이페이지 → “내가 좋아요한 피드”
  • 타인 프로필 → “이 사용자가 좋아요한 피드”

 

📦 LikeRepositoryCustom.java

import java.util.List;

public interface LikeRepositoryCustom {
    List<Long> findFeedIdsByUserId(Long userId);
}

 

📦 LikeRepositoryImpl.java

import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;

import static ddururi.bookbookclub.domain.like.entity.QLike.like;

@Repository
@RequiredArgsConstructor
public class LikeRepositoryImpl implements LikeRepositoryCustom {

    private final JPAQueryFactory queryFactory;

    @Override
    public List<Long> findFeedIdsByUserId(Long userId) {
        return queryFactory.select(like.feed.id)
                .from(like)
                .where(like.user.id.eq(userId))
                .fetch();
    }
}

 

📦 FeedController.java

@GetMapping("/user/{userId}/likes")
public ResponseEntity<ApiResponse<List<FeedResponse>>> getFeedsLikedByUser(
        @PathVariable Long userId,
        Pageable pageable,
        @AuthenticationPrincipal CustomUserDetails userDetails) {

    List<FeedResponse> feeds = feedService.getFeedsLikedByUser(userId, pageable, userDetails.getUser().getId());
    return ResponseEntity.ok(ApiResponse.success(feeds));
}

 

 

[포스트맨으로 테스트하기]

GET /api/feeds/user/3/likes?page=0&size=10

 

 

[테스트 결과 : 성공]

728x90
320x100