Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] #31 repost 기능 구현 및 코드 통합 #31

Merged
merged 17 commits into from
Nov 11, 2024

Conversation

hyxklee
Copy link
Member

@hyxklee hyxklee commented Nov 10, 2024

1. 무슨 이유로 코드를 변경했나요?

  • 개발을 진행한 repost에 현재까지 작업된 Post 내용을 통합하였습니다

2. 어떤 위험이나 장애를 발견했나요?

  • 기존 X 서비스의 플로우와 맞지 않는 API 반환값이 있어 수정했습니다
  • repost하는 경우 repost한 userId도 함께 반환
  • 팔로우 하지 않은 인원들의 부모 글로 수정
  • 프로필에서 조회 시 누구에게 reply 했는지 나타내는 replyTo 항목 추가
  • post 관련 dto를 생성하는 postMapper 구현

3. 관련 스크린샷을 첨부해주세요.

  • 팔로우 하지 않은 사람의 Post를 내가 팔로우한 (userId 5) 유저가 repost 한 경우
image

4. 완료 사항

  • 이미지 업로드, repost 까지 완료 했습니다

5. 추가 사항

  • repost를 취소하는 api 추가
  • 기존 X의 userFlow에 맞는 테스트 필요

@hyxklee hyxklee added feat 기능 개발, 구현 refactor 기능 수정 labels Nov 10, 2024
@hyxklee hyxklee self-assigned this Nov 10, 2024
Copy link
Member

@koreaioi koreaioi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Repost와 Post 개념이 어려워서 구현하기 힘드셨을텐데 수고 많으셨습니다.
코드 주기적으로 보면서 리뷰 추가하겠습니다!

Comment on lines +43 to +58
public List<ParentPostResponseDto> getFollowingPost(String email) {
User user = userService.find(email);

// 자신의 게시물과 리포스트 가져오기
List<ParentPostResponseDto> myPosts = getUserPosts(user, true);
List<ParentPostResponseDto> myReposts = getUserReposts(user, true);

// 팔로잉한 사용자들의 게시물과 리포스트 가져오기
List<ParentPostResponseDto> followingPosts = getFollowingUsersPosts(user);
List<ParentPostResponseDto> followingReposts = getFollowingUsersReposts(user);

// 모든 게시물 합치고 정렬
List<ParentPostResponseDto> allPosts = mergeAndSortPosts(myPosts, myReposts, followingPosts, followingReposts);

return allPosts;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

repost의 핵심 비지니스 로직을 관심사 별로 잘 구분하신거 같습니다.
특히 각각 조회해오는 post와 repost를 합쳐 시간순 정렬까지 잘 고려하신거 같습니다!

import java.util.stream.Collectors;

@Component
public class PostMapper {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존에는 dto의 from이나 entity의 of 정적 메서드를 사용했다면,
post와 repost를 공통으로 사용하는 dto 변환과 관련 로직을 위해 Mapper를 두어 관심사를 분리한건가요??

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존 PostResponseDto 내부 로직이 많아짐에 따라 dto의 역할을 넘어서는 책임이 생긴다고 판단해 dto를 만드는 커스텀 매퍼를 구현했습니다
또 post의 경우 자기 참조를 진행 중이라 dto로 만들어 반환하는 과정에 재귀적인 로직이 필요해 책임을 이전했습니다!

@seokjun01
Copy link
Collaborator

기존에 post 코드에서 변경사항이 있지만, x 시스템상에 맞게 잘 수정되었다고 생각해요.
reply와 repost, post를 구분하는 것이 많이 복잡했을텐데, 고생하셨습니다.
또한 몇몇 메서드들이 mapper안에 저장되어 있었는데, 매퍼에 대한 개념을 몰랐는데, 위 처럼 활용할 수 있음을 알게되었습니다.
더 공부해서 좋은 리뷰 남겨드리겠습니다!
고생하셨어요!

@hyxklee hyxklee merged commit 14c18ff into main Nov 11, 2024
2 checks passed
@hyxklee hyxklee deleted the feat/#27/repost-기능 branch November 11, 2024 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat 기능 개발, 구현 refactor 기능 수정
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants