-
Notifications
You must be signed in to change notification settings - Fork 0
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] #21 팔로우 도메인 개발 #21
The head ref may contain hidden characters: "feat/#20/\uD314\uB85C\uC6B0-\uB3C4\uBA54\uC778-\uAC1C\uBC1C"
Conversation
팔로잉 팔로우는 헷갈리는 구현이라고 생각하는데, 엔티티 관점 별로 구분하여 설명해주시니 이해하기 쉬웠습니다. |
전반적으로 코드 구성이, 제게 해주신 PR리뷰와 비슷한 느낌을 받았습니다! |
# Conflicts: # src/main/java/com/leets/X/domain/user/domain/User.java
@Transactional | ||
public void follow(Long userId, String email){ | ||
User follower = userService.find(email); | ||
User followed = userService.find(userId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
follower와 followed에 각각 다른 매개변수를 넣는 것은 , 다른 사람임을 쉽게 구분하기 위함인가요!?
PR에 올려두신 설명으로 각 변수명의 역할은 이해했습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"팔로우"의 경우 현재 서비스를 이용하는 "본인"이 다른 사람을 팔로우하기 때문에 현재 JWT 토큰을 이용해 인증된 사용자의 email을 가져와서 follower(나 자신)로 조회를 하고, 팔로우 하는 대상은 userId로 입력을 받아서 followed로 조회를 했습니당
|
||
@OneToMany(mappedBy = "follower", cascade = CascadeType.REMOVE, orphanRemoval = true) | ||
private List<Follow> followingList = new ArrayList<>(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다대다 관계를 1:N , N:1로 풀어서 구현하는 부분에 하나의 엔티티는 @manytoone으로 해야하는 것이 아닌가 궁금했는데! User입장에서, 하나의 유저는 다수의 팔로잉, 팔로워를 가질 수 있어서라고 생각하는 것이 맞을까요!?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
유저 1 ㅣ N 팔로우
이기 때문에 "한 명의 유저는 여러 개의 팔로우를 할 수 있다" 로 이해하시면 될 것 같아용
따라서 유저 -> 팔로우는 OneToMany / 팔로우 -> 유저는 ManyToOne으로 이해하시면 될 것 같습니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
유저의 입장에서는 팔로워 / 팔로잉이 나눠져 있기 때문에 의미 적으로 나눠서 저장했다고 생각하시면 될 것 같아요!
import org.springframework.transaction.annotation.Transactional; | ||
|
||
import java.util.List; | ||
@Slf4j |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FollowService내부에 log.info와 같은 코드는 보이지 않는데, @slf4j를 사용하신 이유가 궁금합니다
public List<FollowResponse> getFollowers(Long userId){ | ||
User user = userService.find(userId); | ||
|
||
List<Follow> followerList = user.getFollowerList(); | ||
|
||
return followerList.stream() | ||
.map(follow -> { | ||
return FollowResponse.from(follow.getFollower()); }) | ||
.toList(); | ||
} | ||
|
||
public List<FollowResponse> getFollowings(Long userId){ | ||
User user = userService.find(userId); | ||
|
||
List<Follow> followingList = user.getFollowingList(); | ||
|
||
return followingList.stream() | ||
.map(follow -> { | ||
return FollowResponse.from(follow.getFollowed()); }) | ||
.toList(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return에서 stream객체의 map을 사용하여 코드를 효율적으로 사용하려는 것 같습니다.
그렇다면 메서드 체이닝을 적극적으로 사용하고 return, {}을 제거하는 방식은 어떨까요?
return userService.find(userId).getFollowerList().stream()
.map(follow -> FollowResponse.from(follow.getFollower()))
.toList();
return userService.find(userId).getFollowingList().stream()
.map(follow -> FollowResponse.from(follow.getFollowed()))
.toList();
1. 무슨 이유로 코드를 변경했나요?
2. 어떤 위험이나 장애를 발견했나요?
3. 관련 스크린샷을 첨부해주세요.
4. 완료 사항
5. 추가 사항