친구 목록 조회 기능 구현

2024. 12. 27. 18:05TIL

 

친구 수락 로직 변경

@Transactional
fun acceptFriendRequest(userId: Long, senderId: Long): FriendShipDto {

    val friendRequest = friendRequestRepository.findBySenderIdAndReceiverId(senderId = senderId, receiverId = userId)
        ?: throw IllegalArgumentException("친구 요청을 찾을 수 없습니다.")

    val user = oAuthRepository.findById(userId).getOrNull()

    val sender = oAuthRepository.findById(senderId).getOrNull()

    val friendship = friendshipRepository.findByUserIdAndFriendId(userId = senderId, friendId = userId)
        ?: throw IllegalArgumentException("친구 요청을 찾을 수 없습니다.")

    friendship.status = FriendshipStatus.ACCEPTED
    friendshipRepository.save(friendship)
    friendshipRepository.save(
        Friendship(
            user = user!!,
            friend = sender!!,
            status = FriendshipStatus.ACCEPTED
        )
    )

    friendRequestRepository.delete(friendRequest)

    return FriendShipDto(
        userId = friendship.user.id,
        friendId = friendship.friend.id,
        status = friendship.status.toString(),
        senderName = friendship.friend.userName
    )
}

상대방이 초대를 수락하여 친구 관계가 성립했을 경우 2개의 친구데이터 관계 데이터가 생성되도록 변경

 

Controller 작성

@GetMapping("/get_list")
fun getMyFriendsList(
    @AuthenticationPrincipal user: UserPrincipal
): ResponseEntity<List<FriendShipDto>>{
    return ResponseEntity.status(HttpStatus.OK).body(friendsService.getMyFriendsList(user))
}

 

비즈니스 로직 작성

fun getMyFriendsList(user: UserPrincipal): List<FriendShipDto> {

    val friendList = friendshipRepository.findAllByUserId(user.memberId)
        ?: throw IllegalArgumentException("해당 ${user.memberId} ID의 데이터가 존재하지 않음")
    return friendList.map{ it.toResponse() }
}

 

테스트