From d3ed1d32cd4e96a2737e249240982514c886d8c7 Mon Sep 17 00:00:00 2001 From: onpyeong Date: Fri, 12 Jan 2024 23:25:09 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[Feat]:=20=EC=B9=9C=EA=B5=AC=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 친구 리스트 조회 API 구현 Related to: #44 --- .../SobokSobok/exception/SuccessCode.java | 1 + .../friend/application/FriendService.java | 19 +++++++++++++++++++ .../infrastructure/FriendRepository.java | 3 ++- .../friend/ui/FriendController.java | 19 +++++++++++++++++++ .../friend/ui/dto/FriendListResponse.java | 12 ++++++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/sobok/SobokSobok/friend/ui/dto/FriendListResponse.java diff --git a/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java b/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java index 5ead9de..068474d 100644 --- a/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java +++ b/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java @@ -25,6 +25,7 @@ public enum SuccessCode { // friend ADD_FRIEND_SUCCESS(HttpStatus.OK, "공유 요청에 성공했습니다."), + GET_FRIEND_LIST_SUCCESS(HttpStatus.OK, "친구 리스트 조회에 성공했습니다."), ; private final HttpStatus code; 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 9a1148d..542865e 100644 --- a/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java +++ b/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java @@ -1,20 +1,25 @@ package io.sobok.SobokSobok.friend.application; +import io.sobok.SobokSobok.auth.application.util.UserServiceUtil; import io.sobok.SobokSobok.auth.domain.User; import io.sobok.SobokSobok.auth.infrastructure.UserRepository; import io.sobok.SobokSobok.exception.ErrorCode; import io.sobok.SobokSobok.exception.model.BadRequestException; import io.sobok.SobokSobok.exception.model.ConflictException; import io.sobok.SobokSobok.exception.model.NotFoundException; +import io.sobok.SobokSobok.friend.domain.Friend; import io.sobok.SobokSobok.friend.domain.SendFriend; import io.sobok.SobokSobok.friend.infrastructure.FriendQueryRepository; import io.sobok.SobokSobok.friend.infrastructure.FriendRepository; import io.sobok.SobokSobok.friend.infrastructure.SendFriendRepository; import io.sobok.SobokSobok.friend.ui.dto.AddFriendResponse; +import io.sobok.SobokSobok.friend.ui.dto.FriendListResponse; import io.sobok.SobokSobok.notice.domain.Notice; import io.sobok.SobokSobok.notice.domain.NoticeStatus; import io.sobok.SobokSobok.notice.domain.NoticeType; import io.sobok.SobokSobok.notice.infrastructure.NoticeRepository; +import java.util.List; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,6 +32,7 @@ public class FriendService { private final FriendQueryRepository friendQueryRepository; private final NoticeRepository noticeRepository; private final SendFriendRepository sendFriendRepository; + private final FriendRepository friendRepository; @Transactional public AddFriendResponse addFriend(Long userId, Long memberId, String friendName) { @@ -66,6 +72,19 @@ public AddFriendResponse addFriend(Long userId, Long memberId, String friendName .build(); } + 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()); + } + private User validateUser(Long userId) { return userRepository.findById(userId) .orElseThrow(() -> new NotFoundException(ErrorCode.UNREGISTERED_USER)); 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 bef7068..18f84eb 100644 --- a/src/main/java/io/sobok/SobokSobok/friend/infrastructure/FriendRepository.java +++ b/src/main/java/io/sobok/SobokSobok/friend/infrastructure/FriendRepository.java @@ -1,8 +1,9 @@ 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); } 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 a283990..5766e21 100644 --- a/src/main/java/io/sobok/SobokSobok/friend/ui/FriendController.java +++ b/src/main/java/io/sobok/SobokSobok/friend/ui/FriendController.java @@ -5,12 +5,15 @@ import io.sobok.SobokSobok.exception.SuccessCode; import io.sobok.SobokSobok.friend.application.FriendService; import io.sobok.SobokSobok.friend.ui.dto.AddFriendResponse; +import io.sobok.SobokSobok.friend.ui.dto.FriendListResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +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.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -41,4 +44,20 @@ public ResponseEntity> addFriend( friendService.addFriend(user.getId(), memberId, friendName) )); } + + @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 +) { + +} From 463af6fc0dd65380c4fc53618a56d5c99f50c925 Mon Sep 17 00:00:00 2001 From: onpyeong Date: Sat, 13 Jan 2024 00:45:58 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[Fix]:=20@Transactional=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @Transactional 추가 Related to: #44 --- .../io/sobok/SobokSobok/friend/application/FriendService.java | 1 + 1 file changed, 1 insertion(+) 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 542865e..add2104 100644 --- a/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java +++ b/src/main/java/io/sobok/SobokSobok/friend/application/FriendService.java @@ -72,6 +72,7 @@ public AddFriendResponse addFriend(Long userId, Long memberId, String friendName .build(); } + @Transactional(readOnly = true) public List getFriendList(Long userId) { UserServiceUtil.existsUserById(userRepository, userId);