diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 3a83e9af..49784b09 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,12 +7,12 @@ - + - - + + \ No newline at end of file diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/FollowController.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/FollowController.java index c9d973e4..71c4d3a8 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/FollowController.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/FollowController.java @@ -67,6 +67,13 @@ public ResponseEntity getHasNewFollowers return ResponseEntity.ok(followService.hasFollowers(memberId)); } + @GetMapping("followers/count/{memberId}") + public ResponseEntity getFollowerCount( + @PathVariable Long memberId + ) { + return ResponseEntity.ok(followService.getFollowerCount(memberId)); + } + @PatchMapping("followers/relation/update/{memberId}") public ResponseEntity updateFollowRelation( @PathVariable Long memberId diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/api/FollowApi.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/api/FollowApi.java index 109c3dbb..13aba13e 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/api/FollowApi.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/controller/api/FollowApi.java @@ -196,6 +196,30 @@ public ResponseEntity getHasNewFollowers @PathVariable Long memberId ); + @Operation( + summary = "팔로잉, 팔로워 수 조회", + description = "해당 유저의 팔로잉, 팔로워 수를 조회한다. (팔로워 수, 팔로잉 수)", + security = @SecurityRequirement(name = "bearerAuth") + ) + @Parameter( + in = ParameterIn.HEADER, + name = "Authorization", required = true, + schema = @Schema(type = "string"), + description = "Bearer [Access 토큰]") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회"), + @ApiResponse(responseCode = "401", description = "토큰 인증 실패", + content = @Content(mediaType = "application/json", + examples = @ExampleObject(value = "{\n" + + " \"errorCode\": \"T-002\",\n" + + " \"message\": \"해당 토큰은 유효한 토큰이 아닙니다.\"\n" + + "}")) + ) + }) + @GetMapping("followers/count/{memberId}") + public ResponseEntity getFollowerCount( + @PathVariable Long memberId + ); @Operation( summary = "새 팔로워들을 기존 팔로워들로 변경", description = "해당 멤버의 새로운 팔로워들을 기존 팔로워들로 변경한다.", diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/dto/FollowResponse.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/dto/FollowResponse.java index 8c25be9a..87e2abcb 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/dto/FollowResponse.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/dto/FollowResponse.java @@ -41,6 +41,23 @@ public static isFollowingResponse of(boolean isFollow) { } } + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class FollowCountResponse { + private long followerCount; + private long followingCount; + + public static FollowCountResponse of(long followerCount, long followingCount) { + return FollowCountResponse.builder() + .followerCount(followerCount) + .followingCount(followingCount) + .build(); + } + } + @Getter @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/repository/FollowRepository.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/repository/FollowRepository.java index 157783d5..f2a61a4c 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/repository/FollowRepository.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/repository/FollowRepository.java @@ -19,6 +19,12 @@ public interface FollowRepository extends JpaRepository { // 중복 체크에 사용할 메서드 boolean existsByFollowerIdAndFollowingId(Long followerId, Long followingId); + // 특정 사용자가 팔로우하는 사람 수 + long countByFollower_Id(Long memberId); + + // 특정 사용자를 팔로우하는 사람 수 + long countByFollowing_Id(Long memberId); + @Query("SELECT fol " + "FROM Follow f " + "JOIN f.follower fol " + diff --git a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/service/FollowService.java b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/service/FollowService.java index 43dbac2d..dc3a6bb7 100644 --- a/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/service/FollowService.java +++ b/baebae-BE/src/main/java/com/web/baebaeBE/domain/Follow/service/FollowService.java @@ -53,6 +53,13 @@ public void followMember(Long followerId, Long followingId) { followRepository.save(follow); } + public FollowResponse.FollowCountResponse getFollowerCount(Long memberId) { + long followerCount = followRepository.countByFollower_Id(memberId); + long followingCount = followRepository.countByFollowing_Id(memberId); + + return FollowResponse.FollowCountResponse.of(followerCount, followingCount); + } + public void deleteFollower(Long followerId, Long followingId) { Follow follow = followRepository.findByFollowerIdAndFollowingId(followerId, followingId) .orElseThrow(() -> new BusinessException(FollowException.NOT_EXIST_FOLLOW));