Skip to content

Commit 2248245

Browse files
authored
Merge #85 fix/emotionRecord/delete
fix: 감정 기록 삭제가 안되는 버그 수정 - ChatRoom에서 EmotionRecord @manytoone 관계로 참조해서 감정 기록 삭제 시, 에러 발생되는 것으로 확인 후 수정
2 parents 7702104 + 3635257 commit 2248245

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

src/main/java/org/dfbf/soundlink/domain/chat/repository/ChatRoomRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import org.dfbf.soundlink.domain.user.entity.User;
66
import org.springframework.data.jpa.repository.JpaRepository;
77

8+
import java.util.List;
9+
810
public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long>, ChatRoomCustomRepository {
911
boolean existsByRequestUserIdAndRecordId(User requestUserId, EmotionRecord recordId);
12+
List<ChatRoom> findByRecordId(EmotionRecord recordId);
1013
}

src/main/java/org/dfbf/soundlink/domain/emotionRecord/service/EmotionRecordService.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.dfbf.soundlink.domain.chat.entity.ChatRoom;
6+
import org.dfbf.soundlink.domain.chat.repository.ChatRoomRepository;
57
import org.dfbf.soundlink.domain.emotionRecord.dto.request.EmotionRecordRequestDTO;
68
import org.dfbf.soundlink.domain.emotionRecord.dto.request.EmotionRecordUpdateRequestDTO;
79
import org.dfbf.soundlink.domain.emotionRecord.dto.response.*;
@@ -36,6 +38,7 @@ public class EmotionRecordService {
3638
private final UserRepository userRepository;
3739

3840
private final EmotionRecordCacheService emotionRecordCacheService;
41+
private final ChatRoomRepository chatRoomRepository;
3942

4043
@Transactional
4144
public ResponseResult saveEmotionRecordWithMusic(Long userId, EmotionRecordRequestDTO request) {
@@ -214,7 +217,17 @@ public ResponseResult deleteEmotionRecord(Long recordId) {
214217
EmotionRecord emotionRecord = emotionRecordRepository.findByRecordId(recordId)
215218
.orElseThrow(EmotionRecordNotFoundException::new);
216219

220+
// 해당 EmotionRecord를 참조하는 채팅방 조회
221+
List<ChatRoom> chatRooms = chatRoomRepository.findByRecordId(emotionRecord);
222+
223+
// 채팅방이 존재하면 모두 삭제 후 삭제 내용을 즉시 반영
224+
if (chatRooms != null && !chatRooms.isEmpty()) {
225+
chatRoomRepository.deleteAll(chatRooms);
226+
chatRoomRepository.flush(); // 즉시 DB에 반영
227+
}
228+
217229
int deletedCount = emotionRecordRepository.deleteByRecordId(recordId);
230+
emotionRecordRepository.flush(); // 즉시 DB에 반영
218231

219232
// 게시글 삭제 시, 해당 조건에 맞는 캐시 키 삭제
220233
emotionRecordCacheService.evictEmotionRecordCache(

src/test/java/org/dfbf/soundlink/domain/emotionRecord/EmotionRecordServiceTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.dfbf.soundlink.domain.emotionRecord;
22

3+
import org.dfbf.soundlink.domain.chat.entity.ChatRoom;
4+
import org.dfbf.soundlink.domain.chat.repository.ChatRoomRepository;
35
import org.dfbf.soundlink.domain.emotionRecord.dto.request.EmotionRecordRequestDTO;
46
import org.dfbf.soundlink.domain.emotionRecord.dto.request.EmotionRecordUpdateRequestDTO;
57
import org.dfbf.soundlink.domain.emotionRecord.entity.EmotionRecord;
@@ -20,6 +22,8 @@
2022
import org.mockito.junit.jupiter.MockitoExtension;
2123
import org.springframework.http.HttpStatus;
2224

25+
import java.util.Collections;
26+
import java.util.List;
2327
import java.util.Optional;
2428

2529
import static org.dfbf.soundlink.global.comm.enums.Emotions.HAPPY;
@@ -33,6 +37,8 @@ class EmotionRecordServiceTest {
3337
@Mock
3438
private EmotionRecordCacheService emotionRecordCacheService;
3539
@Mock
40+
private ChatRoomRepository chatRoomRepository;
41+
@Mock
3642
private EmotionRecordRepository emotionRecordRepository;
3743
@Mock
3844
private SpotifyMusicRepository spotifyMusicRepository;
@@ -92,6 +98,13 @@ void deleteEmotionRecord_SUCCESS() {
9298
when(mockRecord.getSpotifyMusic()).thenReturn(mockMusic);
9399
when(mockRecord.getEmotion()).thenReturn(Emotions.HAPPY);
94100

101+
// 채팅방 모의 객체 생성 (해당 EmotionRecord를 참조하는 채팅방 존재)
102+
ChatRoom mockChatRoom = mock(ChatRoom.class);
103+
List<ChatRoom> mockChatRooms = Collections.singletonList(mockChatRoom);
104+
105+
// 스텁 설정
106+
when(chatRoomRepository.findByRecordId(mockRecord))
107+
.thenReturn(mockChatRooms);
95108
when(emotionRecordRepository.findByRecordId(recordId)).thenReturn(Optional.of(mockRecord));
96109
when(emotionRecordRepository.deleteByRecordId(recordId)).thenReturn(1); // 삭제된 레코드 수 1개
97110

@@ -105,7 +118,11 @@ void deleteEmotionRecord_SUCCESS() {
105118
// then
106119
assertEquals(200, result.getCode());
107120
verify(emotionRecordRepository).findByRecordId(recordId);
121+
verify(chatRoomRepository).findByRecordId(mockRecord);
122+
verify(chatRoomRepository).deleteAll(mockChatRooms);
123+
verify(chatRoomRepository).flush();
108124
verify(emotionRecordRepository).deleteByRecordId(recordId);
125+
verify(emotionRecordRepository).flush();
109126
verify(emotionRecordCacheService).evictEmotionRecordCache(any(), any(), any());
110127
}
111128

0 commit comments

Comments
 (0)