사용자가 자신이 팔로우한 다른 사용자들의 게시물을 볼 수 있게 하는 뉴스피드 기능입니다. 이를 통해 사용자는 커뮤니티 내에서 활발한 상호작용과 정보 공유를 경험할 수 있습니다.
FollowController 수정
FollowController에 사용자 뉴스피드를 조회하는 엔드포인트를 추가합니다. 이 메소드는 현재 사용자가 팔로우하는 사용자들의 게시물을 조회합니다.
@GetMapping
public List<PostDto> getfeeds() {
TokenContext context = TokenContextHolder.getContext();
Long followerId = context.getUserId();
return followService.getFeeds(followerId);
}
PostDto 수정
PostDto는 게시물의 데이터를 전달하기 위한 DTO입니다. 이 DTO는 게시물의 ID, 내용, 작성자 이름, 프로필 이미지, 좋아요 수, 댓글 수 등을 포함합니다.
public static PostDto getPostDto(Post post) {
return new PostDto(
post.getId(),
post.getContent(),
post.getUser().getName(),
post.getUser().getProfileImg(),
post.getUser().getId(),
post.getLikes().size(),
post.getComments().size());
}
FollowRepository 수정
FollowRepository에서는 사용자 ID에 따라 게시물을 조회하는 메소드를 정의합니다.
public interface FollowRepository extends JpaRepository<Follow, Long> {
List<Follow> findByFollowerId(Long followerId);
}
FollowService 구현
FollowService에서는 사용자가 팔로우하는 사용자들의 게시물을 조회하는 로직을 구현합니다. 팔로우하는 사용자들의 ID 목록을 가져온 다음, 해당 사용자들의 게시물을 조회합니다.
@Transactional(readOnly = true)
public List<PostDto> getFeeds(Long userId) {
userRepository.findById(userId).orElseThrow(
() -> new BadRequestException("팔로워 사용자를 찾을 수 없습니다.")
);
List<Long> followingIds = followRepository.findByFollowerId(userId).stream()
.map(follow -> follow.getFollowing().getId())
.collect(Collectors.toList());
List<Post> posts = new ArrayList<>();
for (int i = 0; i < followingIds.size(); i++) {
if(postRepository.existsByUserId(followingIds.get(i))){
posts.add(postRepository.findByUserId(followingIds.get(i)));
}
}
return posts.stream().map(PostDto::getPostDto).collect(Collectors.toList());
}
결론
뉴스피드 기능을 통해 사용자는 자신이 관심 있는 커뮤니티 내의 최신 활동을 쉽게 추적할 수 있습니다. 이 기능은 사용자 경험을 향상시키고, 애플리케이션 내에서의 상호작용을 촉진하는 중요한 역할을 합니다. 구현 과정에서 연관관계 매핑을 적절히 활용하여 효율적이고 확장 가능한 데이터 관리 전략을 수립하는 것이 중요합니다.
'프로젝트 (Java) > 예약마켓' 카테고리의 다른 글
[프로젝트] 22. 뉴스피드 알림 기능 리팩토링 (0) | 2024.01.29 |
---|---|
[프로젝트] 21. 뉴스피드 알림 기능 추가 (0) | 2024.01.29 |
[프로젝트] 19. 연관관계 매핑을 통한 회원 탈퇴 기능 (0) | 2024.01.27 |
[프로젝트] 18. 게시물 댓글 작성 및 삭제 기능 (0) | 2024.01.26 |
[프로젝트] 17. 게시물 좋아요 기능 (0) | 2024.01.26 |