Skip to content

Commit 2b34a70

Browse files
authored
merge: pull request #105 from /feat/chat/1
fix: 채팅 요청 수정
2 parents 7f4a405 + 9795f65 commit 2b34a70

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

default/src/main/java/org/dfbf/soundlink/domain/alert/service/AlertService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,9 @@ public void disconnectAlarm(Long userId) {
114114
alertRepository.delete(userId, emitterId);
115115
sseEmitter.complete();
116116
}
117+
118+
// 사용자가 온라인인지 오프라인인지 확인 (Use UserId)
119+
public boolean isOnline(Long userId) {
120+
return alertRepository.getEmitterId(userId).isPresent();
121+
}
117122
}

default/src/main/java/org/dfbf/soundlink/domain/chat/service/ChatRoomService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ public ResponseResult saveRequestToRedis(Long requestUserId, Long emotionRecordI
6464
.getUser()
6565
.getUserId();
6666

67+
// 사용자가 오프라인이면 202 보내고 종료
68+
if (!alertService.isOnline(responseUserId)) {
69+
return new ResponseResult(ErrorCode.CHAT_REQUEST_SSE_FAILED, "Request is not sent.");
70+
}
71+
6772
// 요청자와 응답자가 같은 경우
6873
if (requestUserId.equals(responseUserId)) {
6974
return new ResponseResult(400, "You can't chat with yourself.");

default/src/test/java/org/dfbf/soundlink/domain/chatRoom/ChatRoomServiceTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ void setUp() {
120120
@Test
121121
@DisplayName("채팅 요청: Redis에 저장 성공")
122122
void testSaveRequestToRedis_SUCCESS() {
123+
123124
// given
124125
when(emotionRecordRepository.findById(emotionRecordId)).thenReturn(Optional.of(emotionRecord)); // 감정 기록 조회
125126
when(userRepository.findByUserIdWithCache(requestUserId)).thenReturn(Optional.of(requestUser)); // 요청자 정보 조회
@@ -130,6 +131,9 @@ void testSaveRequestToRedis_SUCCESS() {
130131
// when(alertService.send(eq(responseUserId), eq("alarm"), any(Alert.class)))
131132
// .thenReturn(new ResponseResult(ErrorCode.SUCCESS)); // 알림 전송 mock
132133

134+
// 상대방이 온라인이라고 가정..
135+
when(alertService.isOnline(responseUserId)).thenReturn(true);
136+
133137
// Redis 관련 mock 설정
134138
ValueOperations<String, Object> valueOps = mock(ValueOperations.class); // ValueOperations 객체 생성
135139
when(redisTemplate.opsForValue()).thenReturn(valueOps); // redisTemplate에서 valueOps 반환하도록 설정
@@ -171,6 +175,20 @@ void testDeleteRequestFromRedis_SUCCESS() {
171175
verify(alertService).send(responseUserId, "cancel", "Chat request has been canceled.");
172176
}
173177

178+
@Test
179+
@DisplayName("상대방이 오프라인일 경우")
180+
void testSaveRequestToRedis_Offline() {
181+
// given
182+
when(emotionRecordRepository.findById(emotionRecordId)).thenReturn(Optional.of(emotionRecord));
183+
when(alertService.isOnline(responseUserId)).thenReturn(false); // 핵심만 남김
184+
185+
// when
186+
ResponseResult result = chatRoomService.saveRequestToRedis(requestUserId, emotionRecordId);
187+
188+
// then
189+
assertEquals(202, result.getCode());
190+
}
191+
174192
@Test
175193
@DisplayName("채팅 요청 거절")
176194
void testRequestRejected_SUCCESS() {

0 commit comments

Comments
 (0)