From 0fadd1d9cedff0ba0a16b3eaa698e6ff1264e46d Mon Sep 17 00:00:00 2001 From: GithubKangMin <158579562+GithubKangMin@users.noreply.github.com> Date: Tue, 18 Feb 2025 01:30:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[refactor]=20=EC=B9=9C=EA=B5=AC=EA=B4=80?= =?UTF-8?q?=EA=B3=84=20-=20=EB=B3=B8=EC=9D=B8=EC=9D=B4=20=EB=B3=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=B6=94=EA=B0=80=20=EB=AA=BB=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/friendship/service/FriendshipService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java b/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java index 1b54a16e..a0365291 100644 --- a/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java +++ b/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java @@ -55,14 +55,17 @@ public void acceptInvite(String token, String inviteeEmail) { User invitee = userRepository.findByEmail(inviteeEmail) .orElseThrow(() -> new IllegalArgumentException("Invitee not found")); + // 자신이 자신을 초대하는 경우 방지 + if (invite.getInviter().getId().equals(invitee.getId())) { + throw new IllegalArgumentException("자신은 친구 추가할 수 없습니다."); + } + Friendship friendship = Friendship.builder() .inviter(invite.getInviter()) // User 객체 직접 설정 .invitee(invitee) // 초대받은 User 객체 직접 설정 .status(FriendshipStatus.ACCEPT) .build(); - - friendshipRepository.save(friendship); // 새로운 친구 관계 저장 // 초대 정보 삭제 From 4719e83633bb90c05c526bdd9a67c1edd27b3923 Mon Sep 17 00:00:00 2001 From: GithubKangMin <158579562+GithubKangMin@users.noreply.github.com> Date: Tue, 18 Feb 2025 02:15:24 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[refactor]=20=EC=96=91=EB=B0=A9=ED=96=A5=20?= =?UTF-8?q?=EC=B9=9C=EA=B5=AC=20=EB=90=98=EC=96=B4=EC=9E=88=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=ED=95=9C=EB=B2=88=EC=97=90=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=B9=9C=EA=B5=AC=20=EB=B6=88=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/FriendshipRepository.java | 8 +++++- .../friendship/service/FriendshipService.java | 25 +++++++++++++------ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/umc/yeogi_gal_lae/api/friendship/repository/FriendshipRepository.java b/src/main/java/com/umc/yeogi_gal_lae/api/friendship/repository/FriendshipRepository.java index 99347924..e1174f9a 100644 --- a/src/main/java/com/umc/yeogi_gal_lae/api/friendship/repository/FriendshipRepository.java +++ b/src/main/java/com/umc/yeogi_gal_lae/api/friendship/repository/FriendshipRepository.java @@ -11,7 +11,13 @@ public interface FriendshipRepository extends JpaRepository { Optional findById(Long id); List findByInviterIdOrInviteeId(Long inviterId, Long inviteeId); - Optional findByInviterIdAndInviteeId(Long inviterId, Long inviteeId); + + // inviterId와 inviteeId가 일치하는 Friendship 객체 조회 + @Query("SELECT f FROM Friendship f WHERE (f.inviter.id = :userId AND f.invitee.id = :friendId) OR (f.inviter.id = :friendId AND f.invitee.id = :userId)") + List findByInviterIdAndInviteeIdBothWays(@Param("userId") Long userId, @Param("friendId") Long friendId); + + // 친구 관계가 존재하는지 확인 (양방향) + boolean existsByInviterAndInvitee(User inviter, User invitee); void deleteByInviterOrInvitee(User inviter, User invitee); diff --git a/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java b/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java index a0365291..f9b9e7fc 100644 --- a/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java +++ b/src/main/java/com/umc/yeogi_gal_lae/api/friendship/service/FriendshipService.java @@ -60,13 +60,22 @@ public void acceptInvite(String token, String inviteeEmail) { throw new IllegalArgumentException("자신은 친구 추가할 수 없습니다."); } + // 이미 존재하는 친구 관계 확인 (양방향) + boolean isAlreadyFriend = friendshipRepository.existsByInviterAndInvitee(invite.getInviter(), invitee) + || friendshipRepository.existsByInviterAndInvitee(invitee, invite.getInviter()); + + if (isAlreadyFriend) { + throw new IllegalArgumentException("이미 친구 관계가 존재합니다."); + } + + // 새로운 친구 관계 저장 Friendship friendship = Friendship.builder() .inviter(invite.getInviter()) // User 객체 직접 설정 .invitee(invitee) // 초대받은 User 객체 직접 설정 .status(FriendshipStatus.ACCEPT) .build(); - friendshipRepository.save(friendship); // 새로운 친구 관계 저장 + friendshipRepository.save(friendship); // 초대 정보 삭제 friendshipInviteRepository.delete(invite); @@ -134,13 +143,15 @@ private List generateMockFriendList() { @Transactional public void deleteFriendship(Long userId, Long friendId) { - // 친구 관계 조회 (양방향 확인) - Friendship friendship = friendshipRepository.findByInviterIdAndInviteeId(userId, friendId) - .or(() -> friendshipRepository.findByInviterIdAndInviteeId(friendId, userId)) // 반대 방향도 확인 - .orElseThrow(() -> new IllegalArgumentException("친구 관계가 아닙니다. ")); + // 양방향 친구 관계를 모두 조회 + List friendships = friendshipRepository.findByInviterIdAndInviteeIdBothWays(userId, friendId); + + if (friendships.isEmpty()) { + throw new IllegalArgumentException("친구 관계가 아닙니다."); + } - // 친구 관계 삭제 - friendshipRepository.delete(friendship); + // 모든 친구 관계 삭제 + friendshipRepository.deleteAll(friendships); } } \ No newline at end of file