[TIL] 230904 마이페이지를 만들어보았어요

CountryGirl·2023년 9월 4일
0

TIL

목록 보기
57/80

프로젝트를 하면서 마이페이지가 "필요하다" 파 VS "필요하지 않다" 파가 있었다....
매일 회의의 안건으로 나올 정도로 되게 많이 이야기 했던 것 같다!

갑론을박 (甲論乙駁)

그러다 결국 카카오 로그인 기능이 추가되면서 마이페이지를 만들게 되었다.

결국 결과적으로는 "필요하다" 파가 이겼고 진행하기로 했다.

나는 개인의 활동 내역 조회을 할 수 있도록!

  • 내가 작성한 글
  • 내가 “나도 불편해요” 버튼을 누른 게시글
  • 내가 댓글을 작성한 게시글 조회

기능을 만들기로 하였다!

📌 내가 작성한 글

페이지네이션도 해야한다!

⚙️ Controller

@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 를 사용해서 굳이 sizeparam 으로 받지 않도록 기본으로 설정해주었다.

@PageableDefault(page = 0, size = 7, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable
  • sort = "createdAt": createdAt 를 기준으로 정렬
  • direction = Sort.Direction.DESC: 역순 (최신 글이 가장 위로 오도록)

🤝🏻 Service

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 에서 "불편해요" 를 가져온 다음에 각각 "불편해요"의 게시글을 가져오고.. 페이지네이션 처리도 해야했다.

사실 이 코드가 맞는 코드인지 좋은 코드인지 잘 모르겠다.....

🤝🏻Service

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);
}

📌 내가 댓글을 작성한 게시글 조회

댓글을 작성한 게시글 조회하는 것도 복잡했다.
마찬가지로 먼저 댓글을 가져오고 그에 게시글도 가져와야했다. 또 페이지처리도 했어야했다.. 뽁잡하다

사실 페이지네이션을 처음해보았다... 그래서 아직 익숙하지 않아 더 어려워했던 것 같다.

공부해야겠다!!!!!!!!

🤝🏻 Service

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);
}

그래도 마이페이지를 처리해서.. 정말 마음이 편하다

나는 개인적으로 마이페이지는 "있어야 한다" 파였다.
오늘은 내 생일........ 인데.. 마이페이지 만드는 날이 되었다..

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글