diff --git a/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java b/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java index 7442a50..059871f 100644 --- a/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java +++ b/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java @@ -26,6 +26,7 @@ public enum SuccessCode { // friend ADD_FRIEND_SUCCESS(HttpStatus.OK, "공유 요청에 성공했습니다."), + GET_FRIEND_LIST_SUCCESS(HttpStatus.OK, "친구 리스트 조회에 성공했습니다."), HANDLE_FRIEND_REQUEST_SUCCESS(HttpStatus.OK, "공유 응답에 성공했습니다."), // notice diff --git a/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java b/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java index 17333d2..50bf8a1 100644 --- a/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java +++ b/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java @@ -13,6 +13,7 @@ import io.sobok.SobokSobok.friend.infrastructure.SendFriendRepository; import io.sobok.SobokSobok.friend.ui.dto.AddFriendRequest; import io.sobok.SobokSobok.friend.ui.dto.AddFriendResponse; +import io.sobok.SobokSobok.friend.ui.dto.FriendListResponse; import io.sobok.SobokSobok.friend.ui.dto.HandleFriendRequest; import io.sobok.SobokSobok.friend.ui.dto.HandleFriendRequestResponse; import io.sobok.SobokSobok.notice.domain.Notice; @@ -21,6 +22,8 @@ import io.sobok.SobokSobok.notice.infrastructure.NoticeQueryRepository; import io.sobok.SobokSobok.notice.infrastructure.NoticeRepository; import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -80,6 +83,20 @@ public AddFriendResponse addFriend(Long userId, AddFriendRequest request) { .build(); } + @Transactional(readOnly = true) + public List getFriendList(Long userId) { + UserServiceUtil.existsUserById(userRepository, userId); + + return friendRepository.findAllBySenderId(userId) + .stream().map(friend -> + FriendListResponse.builder() + .friendId(friend.getId()) + .memberId(friend.getReceiverId()) + .friendName(friend.getFriendName()) + .build() + ).collect(Collectors.toList()); + } + @Transactional(noRollbackFor = {ConflictException.class}) public HandleFriendRequestResponse updateNoticeStatus(Long userId, Long noticeId, HandleFriendRequest request) { diff --git a/src/main/java/io/sobok/SobokSobok/friend/infrastructure/FriendRepository.java b/src/main/java/io/sobok/SobokSobok/friend/infrastructure/FriendRepository.java index 6cccf17..899558b 100644 --- a/src/main/java/io/sobok/SobokSobok/friend/infrastructure/FriendRepository.java +++ b/src/main/java/io/sobok/SobokSobok/friend/infrastructure/FriendRepository.java @@ -1,9 +1,12 @@ package io.sobok.SobokSobok.friend.infrastructure; import io.sobok.SobokSobok.friend.domain.Friend; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; public interface FriendRepository extends JpaRepository { + List findAllBySenderId(Long senderId); + Integer countBySenderId(Long senderId); } diff --git a/src/main/java/io/sobok/SobokSobok/friend/ui/FriendController.java b/src/main/java/io/sobok/SobokSobok/friend/ui/FriendController.java index fa6bbd2..0b8dbf1 100644 --- a/src/main/java/io/sobok/SobokSobok/friend/ui/FriendController.java +++ b/src/main/java/io/sobok/SobokSobok/friend/ui/FriendController.java @@ -6,15 +6,18 @@ import io.sobok.SobokSobok.friend.application.FriendService; import io.sobok.SobokSobok.friend.ui.dto.AddFriendRequest; import io.sobok.SobokSobok.friend.ui.dto.AddFriendResponse; +import io.sobok.SobokSobok.friend.ui.dto.FriendListResponse; import io.sobok.SobokSobok.friend.ui.dto.HandleFriendRequest; import io.sobok.SobokSobok.friend.ui.dto.HandleFriendRequestResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -64,4 +67,20 @@ public ResponseEntity> handleFriendRequ friendService.updateNoticeStatus(user.getId(), noticeId, request) )); } + + @GetMapping("") + @Operation( + summary = "친구 리스트 조회 API 메서드", + description = "친구 리스트를 조회하는 메서드입니다." + ) + public ResponseEntity>> getFriendList( + @AuthenticationPrincipal User user + ) { + return ResponseEntity + .status(HttpStatus.OK) + .body(ApiResponse.success( + SuccessCode.GET_FRIEND_LIST_SUCCESS, + friendService.getFriendList(user.getId()) + )); + } } diff --git a/src/main/java/io/sobok/SobokSobok/friend/ui/dto/FriendListResponse.java b/src/main/java/io/sobok/SobokSobok/friend/ui/dto/FriendListResponse.java new file mode 100644 index 0000000..0727185 --- /dev/null +++ b/src/main/java/io/sobok/SobokSobok/friend/ui/dto/FriendListResponse.java @@ -0,0 +1,12 @@ +package io.sobok.SobokSobok.friend.ui.dto; + +import lombok.Builder; + +@Builder +public record FriendListResponse( + Long friendId, + Long memberId, + String friendName +) { + +}