티스토리 뷰
해결해야 할 요구사항
회원 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();
}
'Web > Spring' 카테고리의 다른 글
내가 아는 선의 Spring Data JPA 정리 (1) | 2024.05.10 |
---|---|
스프링부트 프로젝트 세팅(feat. Swagger/spirngfox 오류 해결 방법) (0) | 2024.04.15 |
새로운 채팅 메세지 표시 (0) | 2024.04.12 |
[Websocket/Stomp] 채팅 메세지 알림 (0) | 2024.04.09 |
[Srping DI] Java Code 기반 설정, Annotation 기반 설정 (0) | 2024.04.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바 9375
- 프로그래밍
- 웹
- 백준 2108
- 동덕여대
- 스프링부트
- 스파크
- 스프링부터
- 안드로이드
- 스프링 강의
- 백준
- 13305 자바
- 백준9375번
- RDD
- 백준 1004
- BFS
- 동덕여대 컴퓨터학과
- 자바 1004번
- 컴과
- 코틀린
- 그리디 알고리즘
- 자바
- 코딩
- 생활코딩
- 개발
- 알고리즘
- 인프런 김영한 강의
- 컴공
- 아이엘츠
- 컴퓨터학과
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함