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);
}
'프로젝트 > SNS만들기' 카테고리의 다른 글
[SNS Project] Post 삭제 시 Like, Comment 삭제하기 (영속성 전이, Soft Delete) (0) | 2023.01.07 |
---|---|
[SNS Project] 마이피드 테스트 (0) | 2023.01.06 |
[SNS Project] 좋아요 기능 - Soft Delete 리펙토링(@Modifying) (2) | 2023.01.06 |
[SNS Project] Post, User 예외처리 분리하기 (0) | 2023.01.04 |
[SNS Project] 좋아요 테스트 (0) | 2023.01.04 |