diff --git a/src/main/java/com/bugflix/weblog/follow/controller/FollowController.java b/src/main/java/com/bugflix/weblog/follow/controller/FollowController.java index ee5793e..7ef909f 100644 --- a/src/main/java/com/bugflix/weblog/follow/controller/FollowController.java +++ b/src/main/java/com/bugflix/weblog/follow/controller/FollowController.java @@ -47,8 +47,7 @@ public ResponseEntity addFollow(@Valid @RequestBody FollowRequest followRe */ @GetMapping("/v1/follows/mine/follower") @Operation(summary = "follower 조회", description = "현재 사용자를 follow하는 follower 목록을 조회합니다.") - public ResponseEntity> searchFollowing(@AuthenticationPrincipal UserDetails userDetails) { - + public ResponseEntity> searchFollowing(@AuthenticationPrincipal UserDetails userDetails) { return ResponseEntity.ok(followService.searchFollowers(userDetails)); } diff --git a/src/main/java/com/bugflix/weblog/follow/dto/FollowResponse.java b/src/main/java/com/bugflix/weblog/follow/dto/FollowResponse.java index 0268ad5..2e448b8 100644 --- a/src/main/java/com/bugflix/weblog/follow/dto/FollowResponse.java +++ b/src/main/java/com/bugflix/weblog/follow/dto/FollowResponse.java @@ -3,13 +3,11 @@ import com.bugflix.weblog.profile.domain.Profile; import com.bugflix.weblog.user.domain.User; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @Getter @NoArgsConstructor -@AllArgsConstructor @Schema(description = "Follower 혹은 Following 중인 사용자의 정보 DTO") public class FollowResponse { @Schema(description = "nickname", example = "namu") @@ -17,6 +15,27 @@ public class FollowResponse { @Schema(description = "Follower 혹은 Following 중인 사용자의 profile image url", example = "http://~") private String profileImageUrl; + @Getter + @NoArgsConstructor + public static class MyFollowResponse extends FollowResponse { + @Schema(description = "팔로잉 상태", example = "false") + private Boolean followed; + + private MyFollowResponse(User user, Profile profile, Boolean followed) { + super(user.getNickname(), profile.getImageUrl()); + this.followed = followed; + } + + public static MyFollowResponse of(User user, Profile profile, Boolean followed) { + return new MyFollowResponse(user, profile, followed); + } + } + + private FollowResponse(String nickname, String profileImageUrl) { + this.nickname = nickname; + this.profileImageUrl = profileImageUrl; + } + private FollowResponse(User user, Profile profile) { this.nickname = user.getNickname(); this.profileImageUrl = profile.getImageUrl(); diff --git a/src/main/java/com/bugflix/weblog/follow/service/FollowServiceImpl.java b/src/main/java/com/bugflix/weblog/follow/service/FollowServiceImpl.java index b4fd838..a2ab9c8 100644 --- a/src/main/java/com/bugflix/weblog/follow/service/FollowServiceImpl.java +++ b/src/main/java/com/bugflix/weblog/follow/service/FollowServiceImpl.java @@ -13,9 +13,9 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; - +import java.util.Set; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -33,19 +33,22 @@ public void addFollow(FollowRequest followRequest, UserDetails userDetails) { } - public List searchFollowers(UserDetails userDetails) { + public List searchFollowers(UserDetails userDetails) { User user = ((CustomUserDetails) userDetails).getUser(); - List follows = followRepository.findByFollowing(user); - return follows.stream() + + List toFollows = followRepository.findByFollowing(user); + List fromFollows = followRepository.findByFollower(user); + Set followings = fromFollows.stream().map(Follow::getFollowing).map(User::getUserId).collect(Collectors.toSet()); + return toFollows.stream() .map(Follow::getFollower) - .map(follower -> FollowResponse.of(follower, follower.getProfile())) + // User - Profile 1대1 매핑 (Default=EAGER) + .map(follower -> FollowResponse.MyFollowResponse.of(follower, follower.getProfile(), followings.contains(follower.getUserId()))) .toList(); } public List searchFollwings(UserDetails userDetails) { User user = ((CustomUserDetails) userDetails).getUser(); List follows = followRepository.findByFollower(user); - ArrayList followResponses = new ArrayList<>(); return follows.stream() .map(Follow::getFollowing) @@ -67,7 +70,6 @@ public List searchFollwings(String nickname) { User user = userRepository.findByNickname(nickname) .orElseThrow(() -> new ResourceNotFoundException(Errors.USER_NOT_FOUND)); List follows = followRepository.findByFollower(user); - ArrayList followResponses = new ArrayList<>(); return follows.stream() .map(Follow::getFollowing)