티스토리 뷰

 

해결해야 할 요구사항

회원 A가 회원 B와 채팅하기 버튼을 누른 상황이다.

이때 기존 A, B간의 채팅룸이 존재한다면 ture를 반환하고 존재하지 않는다면 false를 반환하는 api를 작성해야 한다.

 

해결 방법

채팅 참여 테이블에서 A가 참여한 roomId 리스트와 B가 참여한 roomId의 교집합을 구한다.

교집합의 원소가 있으면 true, 없으면 false를 반환한다.

 

코드

ChatRoomController.java

    @GetMapping("/check")
    public ResponseEntity<Boolean> hasChatRoom(@AuthUser User user, @RequestParam("receiverId") Long receiverId) {
        if(user == null) throw new CustomException(ErrorCode.AUTHENTICATION_ERROR, "로그인한 사용자만 가능합니다.");
        return ResponseEntity.ok(chatRoomService.hasChatRoom(user.getId(), receiverId));
    }

 

ChatRoomService.java

    public boolean hasChatRoom(Long userId, Long receiverId) {
       List<Long> roomIdsOfUser = chatRepository.findChatsById(userId)
               .stream()
               .map(Chat::getChatRoomId)
               .collect(Collectors.toList());

        List<Long> roomIdsOfReceiver = chatRepository.findChatsById(receiverId)
                .stream()
                .map(Chat::getChatRoomId)
                .collect(Collectors.toList());

        roomIdsOfUser.retainAll(roomIdsOfReceiver);

        return !roomIdsOfUser.isEmpty();
    }

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함