Skip to content

Commit

Permalink
#282 Feat: 내가 팔로우한 유저/팀의 다이어리 목록 조회
Browse files Browse the repository at this point in the history
  • Loading branch information
yumzen committed Nov 21, 2024
1 parent 9c0f561 commit f80678f
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -209,4 +209,12 @@ public ApiResponse<String> cancelBookmark(

return ApiResponse.onSuccess(SuccessStatus.BOOKMARK_OK, response);
}

@GetMapping("/following/paging")
@Operation(summary = "팔로잉한 멤버/팀의 게시글 리스트 페이징 조회 API", description = "팔로잉한 멤버/팀의 게시글 리스트를 페이징으로 조회합니다. **첫 페이지는 0부터 입니다.**")
public ApiResponse<PostResponseDTO.PostPreviewListDTO> findPostByFollowing(@AuthenticationPrincipal CustomMemberDetails memberDetails,
@PageableDefault(size = 9) Pageable pageable) {
Page<Post> posts = postQueryService.getPostsByFollowing(memberDetails.getId(), pageable);
return ApiResponse.onSuccess(SuccessStatus.POST_OK, PostConverter.toPostPreviewListDTO(posts));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@
public interface PostRepositoryCustom {
Page<Post> searchPost(String keyword, Pageable pageable);
Map<Project, List<Post>> findPostsForCalendar(Long memberId, LocalDate date);

Page<Post> findPostsByFollowing(Long id, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@
import java.util.Map;
import java.util.stream.Collectors;

import static com.codiary.backend.domain.member.entity.QFollow.follow;
import static com.codiary.backend.domain.member.entity.QMember.member;
import static com.codiary.backend.domain.post.entity.QPost.post;
import static com.codiary.backend.domain.project.entity.QProject.project;
import static com.codiary.backend.domain.team.entity.QTeam.team;
import static com.codiary.backend.domain.team.entity.QTeamFollow.teamFollow;

@RequiredArgsConstructor
public class PostRepositoryImpl implements PostRepositoryCustom {
Expand Down Expand Up @@ -65,4 +69,50 @@ public Map<Project, List<Post>> findPostsForCalendar(Long memberId, LocalDate da
Collectors.collectingAndThen(Collectors.toList(), ArrayList::new)
));
}

public Page<Post> findPostsByFollowing(Long id, Pageable pageable) {
// 게시글 데이터 조회
List<Post> posts = queryFactory
.selectFrom(post)
.leftJoin(post.member, member)
.leftJoin(post.team, team)
.leftJoin(follow).on(
follow.toMember.eq(member)
.and(follow.fromMember.memberId.eq(id))
.and(follow.followStatus.eq(true)))
.leftJoin(teamFollow).on(
teamFollow.team.eq(team)
.and(teamFollow.member.memberId.eq(id))
.and(teamFollow.followStatus.eq(true)))
.where(
// 내가 팔로우한 유저의 게시글 또는 팔로우한 팀의 게시글
(follow.toMember.isNotNull())
.or(teamFollow.isNotNull().and(team.deletedAt.isNull()))
)
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();

// 총 개수 계산
Long total = queryFactory
.select(post.count())
.from(post)
.leftJoin(post.member, member)
.leftJoin(post.team, team)
.leftJoin(follow).on(
follow.toMember.eq(member)
.and(follow.fromMember.memberId.eq(id))
.and(follow.followStatus.eq(true)))
.leftJoin(teamFollow).on(
teamFollow.team.eq(team)
.and(teamFollow.member.memberId.eq(id))
.and(teamFollow.followStatus.eq(true)))
.where(
(follow.toMember.isNotNull())
.or(teamFollow.isNotNull().and(team.deletedAt.isNull()))
)
.fetchOne();

return new PageImpl<>(posts, pageable, total);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.codiary.backend.domain.team.entity.Team;
import com.codiary.backend.domain.team.repository.TeamRepository;
import com.codiary.backend.global.apiPayload.code.status.ErrorStatus;
import com.codiary.backend.global.apiPayload.exception.GeneralException;
import com.codiary.backend.global.apiPayload.exception.handler.PostHandler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -150,7 +151,12 @@ public Post.PostAdjacent findAdjacentPosts(Long postId) {
}


public Page<Post> getPostsByFollowing(Long id, Pageable pageable) {
//validation
Member member = memberRepository.findById(id)
.orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND));



//return
return postRepository.findPostsByFollowing(id, pageable);
}
}

0 comments on commit f80678f

Please sign in to comment.