수진개발서

sns만들기 프로젝트 3일차 마이피드 기능을 구현하였다.

요구사항은 다음과 같다.

요구사항

- 마이피드
- 내가 작성한 글만 보이는 기능
- 제목, 글쓴이, 내용, 작성날짜 포함
- 목록 기능은 페이징 기능이 포함된다. (Pageable 사용)
    - 한 페이지당 20개, 총 페이지 개수 포함, 작성날짜 기준으로 sort

- 마이피드 조회 GET /posts/myJson방식으로 리턴
- response 형태: { "resultCode": "SUCCESS",
                             "result":{ "content":[
                                                     { "id": 4,
                                                       "title": "test",
                                                       "body": "body",
                                                       "userName": "test",
                                                       "createdAt": "2022-12-16T16:50:37.515952" } ],
                             "pageable":{ "sort":
                                                     {"empty": true, "sorted": false, "unsorted": true },
                                                      "offset": 0,…},
                                                       "last": true, "totalPages": 1, "totalElements": 1, "size": 20, "number": 0, "sort":{ "empty": true, "sorted": false, "unsorted": true }, "numberOfElements": 1, "first": true, "empty": false }

 

코드

PostController

페이징 처리를 위해 PageRequest객체를 사용했다. 20개씩 게시물의 id기준으로 내림차순 정렬을 해주었다.
그리고 return할 때 PageImpl을 사용해서 page객체의 데이터를 함께 return 해주었다.

/**
     * 마이피드
     */
    @GetMapping("/my")
    public Response<Page<PostGetResponse>> getMyList(Authentication authentication){
        String userName = authentication.getName();
        PageRequest pageable = PageRequest.of(0,20, Sort.by("id").descending());
        List<PostGetResponse> postGetRespons = postService.getMyPost(pageable, userName);
        return Response.success( new PageImpl<> (postGetRespons));
    }

PostService

로그인 된 사용자의 validate를 검증해준 후 PostRepository에서 글쓴이가 로그인 된 사용자인 게시물들만 불러오도록 했다.
이후는 PostGetResponse dto를 리스트화 해서 보내주었다.

   /**
     * 마이 피드
     */
    public List<PostGetResponse> getMyPost(PageRequest pageable, String userName) {
        User user = validateService.validateUser(userName);
        Page<Post> myPosts = postRepository.findPostByUser(user, pageable);
        List<PostGetResponse> myPostGetResponse = myPosts.stream()
                .map(post -> PostGetResponse.fromEntity(post)).collect(Collectors.toList());

        return myPostGetResponse;
    }

PostRepository

해당 User의 게시물만 가져오도록 findPostbyUser라는 메서드 쿼리를 작성했다.

public interface PostRepository extends JpaRepository<Post, Long> {
    Page<Post> findPostByUser(User user, Pageable pageable);
}
profile

수진개발서

@sujin_park0607

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!