프로젝트를 하면서 마이페이지가 "필요하다" 파 VS "필요하지 않다" 파가 있었다....
매일 회의의 안건으로 나올 정도로 되게 많이 이야기 했던 것 같다!
갑론을박 (甲論乙駁)
그러다 결국 카카오 로그인 기능이 추가되면서 마이페이지를 만들게 되었다.
결국 결과적으로는 "필요하다" 파가 이겼고 진행하기로 했다.
나는 개인의 활동 내역 조회을 할 수 있도록!
기능을 만들기로 하였다!
페이지네이션도 해야한다!
@GetMapping("/myposts")
public ResponseEntity<CommonResponse<PagingResponseDto>> getMyPosts(
@AuthenticationPrincipal UserDetailsImpl userDetails,
@PageableDefault(page = 0, size = 7, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable
) {
return new ResponseEntity<>(myPagePostService.getMyPosts(
userDetails.getUser(), pageable),
HttpStatus.OK)
;
}
프론트엔드 분과 디자이너님이랑 한 페이지에 게시글 7개만 보일 수 있도록 쇼부봤다.
그래서 나는
@PageableDefault
를 사용해서 굳이 size
를 param
으로 받지 않도록 기본으로 설정해주었다.
@PageableDefault(page = 0, size = 7, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable
sort = "createdAt"
: createdAt
를 기준으로 정렬direction = Sort.Direction.DESC
: 역순 (최신 글이 가장 위로 오도록)public CommonResponse<PagingResponseDto> getMyPosts(User user, Pageable pageable) {
Page<Post> myPosts = postRepository.findPostByUserId(user.getUserId(), pageable);
Page<MyPagePostsResponseDto> myPagePostsResponseDtoList = myPosts.map(MyPagePostsResponseDto::new);
PagingResponseDto pageInfoResponseDto = new PagingResponseDto(myPagePostsResponseDtoList);
return new CommonResponse<>(GET_POST_MESSAGE, pageInfoResponseDto);
}
내가 작성한 글을 조회하는 메서드는 쉽게 구현할 수 있었지만.....
"나도 불편해요" 버튼을 누른 게시글을 조회하는 것은 좀 복잡했다.
먼저,
나도 불편해요 repository
에서 "불편해요" 를 가져온 다음에 각각 "불편해요"의 게시글을 가져오고.. 페이지네이션 처리도 해야했다.
사실 이 코드가 맞는 코드인지 좋은 코드인지 잘 모르겠다.....
public CommonResponse<PagingResponseDto> getMyAgrees(User user, Pageable pageable) {
Page<Agree> agrees = agreeRepository.findAgreeByUserId(user.getUserId(), pageable);
List<Post> agreesPosts = new ArrayList<>();
List<MyPagePostsResponseDto> myPagePostsResponseDtoList = new ArrayList<>();
for (Agree agree : agrees) {
Post post = postRepository.findById(agree.getPost().getPostId()).orElseThrow(
() -> new PostException(ClientErrorCode.NO_POST));
agreesPosts.add(post);
myPagePostsResponseDtoList.add(new MyPagePostsResponseDto(post, agree));
}
PagingResponseDto pageInfoResponseDto = new PagingResponseDto(
agrees.getTotalPages(),
agrees.getNumber(),
myPagePostsResponseDtoList
);
return new CommonResponse<>(GET_POST_MESSAGE, pageInfoResponseDto);
}
댓글을 작성한 게시글 조회하는 것도 복잡했다.
마찬가지로 먼저 댓글을 가져오고 그에 게시글도 가져와야했다. 또 페이지처리도 했어야했다.. 뽁잡하다
사실 페이지네이션을 처음해보았다... 그래서 아직 익숙하지 않아 더 어려워했던 것 같다.
공부해야겠다!!!!!!!!
public CommonResponse<PagingResponseDto> getMyComments(User user, Pageable pageable) {
Page<Comment> comments = commentRepository.findCommentsByUserId(user.getUserId(), pageable);
List<Post> commentPosts = new ArrayList<>();
List<MyPagePostsResponseDto> myPagePostsResponseDtoList = new ArrayList<>();
for (Comment comment : comments) {
Post post = postRepository.findById(comment.getPost().getPostId()).orElseThrow(
() -> new PostException(ClientErrorCode.NO_POST));
commentPosts.add(post);
myPagePostsResponseDtoList.add(new MyPagePostsResponseDto(post, comment));
}
PagingResponseDto pagingResponseDto = new PagingResponseDto(
comments.getTotalPages(),
comments.getNumber(),
myPagePostsResponseDtoList
);
return new CommonResponse<>(GET_POST_MESSAGE, pagingResponseDto);
}
그래도 마이페이지를 처리해서.. 정말 마음이 편하다
나는 개인적으로 마이페이지는 "있어야 한다" 파였다.
오늘은 내 생일........ 인데.. 마이페이지 만드는 날이 되었다..