Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,13 @@
public interface FriendshipRepository extends JpaRepository<Friendship, Long> {
Optional<Friendship> findById(Long id);
List<Friendship> findByInviterIdOrInviteeId(Long inviterId, Long inviteeId);
Optional<Friendship> 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<Friendship> findByInviterIdAndInviteeIdBothWays(@Param("userId") Long userId, @Param("friendId") Long friendId);

// 친구 관계가 존재하는지 확인 (양방향)
boolean existsByInviterAndInvitee(User inviter, User invitee);

void deleteByInviterOrInvitee(User inviter, User invitee);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,27 @@ 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("자신은 친구 추가할 수 없습니다.");
}

// 이미 존재하는 친구 관계 확인 (양방향)
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);
Expand Down Expand Up @@ -131,13 +143,15 @@ private List<FriendListResponse> generateMockFriendList() {

@Transactional
public void deleteFriendship(Long userId, Long friendId) {
// 친구 관계 조회 (양방향 확인)
Friendship friendship = friendshipRepository.findByInviterIdAndInviteeId(userId, friendId)
.or(() -> friendshipRepository.findByInviterIdAndInviteeId(friendId, userId)) // 반대 방향도 확인
.orElseThrow(() -> new IllegalArgumentException("친구 관계가 아닙니다. "));
// 양방향 친구 관계를 모두 조회
List<Friendship> friendships = friendshipRepository.findByInviterIdAndInviteeIdBothWays(userId, friendId);

if (friendships.isEmpty()) {
throw new IllegalArgumentException("친구 관계가 아닙니다.");
}

// 친구 관계 삭제
friendshipRepository.delete(friendship);
// 모든 친구 관계 삭제
friendshipRepository.deleteAll(friendships);
}

}