Skip to content

Commit 04979eb

Browse files
Merge pull request #142 from DeepDive-Final-Project/fix/chat-read
[#141] 읽지 않는 메시지 처리 수정
2 parents 4560d48 + d0ded79 commit 04979eb

3 files changed

Lines changed: 19 additions & 5 deletions

File tree

src/main/java/com/goorm/team9/icontact/config/jpa/JpaConfig.java

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

33
import org.springframework.context.annotation.Configuration;
44
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
5+
import org.springframework.transaction.annotation.EnableTransactionManagement;
56

67
@Configuration
78
@EnableJpaAuditing
9+
@EnableTransactionManagement
810
public class JpaConfig {
911
}

src/main/java/com/goorm/team9/icontact/domain/chat/repository/ChatMessageRepository.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import com.goorm.team9.icontact.domain.chat.entity.ChatRoom;
55
import com.goorm.team9.icontact.domain.client.entity.ClientEntity;
66
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.data.jpa.repository.Modifying;
78
import org.springframework.data.jpa.repository.Query;
89
import org.springframework.data.repository.query.Param;
10+
import org.springframework.transaction.annotation.Transactional;
911

1012
import java.util.List;
1113

@@ -31,4 +33,14 @@ List<ChatMessage> findUnreadMessages(@Param("chatRoom") ChatRoom chatRoom,
3133
@Query("SELECT m FROM ChatMessage m WHERE m.chatRoom = :chatRoom ORDER BY m.created_at ASC")
3234
List<ChatMessage> findByChatRoomOrderByCreatedAtAsc(@Param("chatRoom") ChatRoom chatRoom);
3335

36+
@Modifying
37+
@Query("UPDATE ChatMessage m " +
38+
"SET m.isRead = true " +
39+
"WHERE m.chatRoom = :chatRoom " +
40+
"AND m.isRead = false " +
41+
"AND m.senderNickname <> :readerNickname")
42+
int markMessagesAsRead(@Param("chatRoom") ChatRoom chatRoom,
43+
@Param("readerNickname") String readerNickname);
44+
45+
3446
}

src/main/java/com/goorm/team9/icontact/domain/chat/service/ChatMessageService.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.goorm.team9.icontact.domain.client.entity.ClientEntity;
1313
import com.goorm.team9.icontact.domain.client.repository.ClientRepository;
1414
import lombok.RequiredArgsConstructor;
15+
import lombok.extern.slf4j.Slf4j;
1516
import org.springframework.http.HttpStatus;
1617
import org.springframework.messaging.simp.SimpMessagingTemplate;
1718
import org.springframework.stereotype.Service;
@@ -21,6 +22,7 @@
2122
import java.util.List;
2223
import java.util.stream.Collectors;
2324

25+
@Slf4j
2426
@Service
2527
@RequiredArgsConstructor
2628
public class ChatMessageService {
@@ -144,13 +146,11 @@ public void markMessagesAsRead(Long roomId, Long clientId) {
144146
ClientEntity reader = clientRepository.findById(clientId)
145147
.orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다."));
146148

147-
List<ChatMessage> unreadMessages = chatMessageRepository.findUnreadMessages(chatRoom, reader);
149+
int updatedCount = chatMessageRepository.markMessagesAsRead(chatRoom, reader.getNickName());
148150

149-
for (ChatMessage chatMessage : unreadMessages) {
150-
chatMessage.markAsRead();
151+
if (updatedCount > 0) {
152+
log.info("✅ {}개의 메시지를 읽음 처리했습니다. [roomId={}, reader={}]", updatedCount, roomId, reader.getNickName());
151153
}
152-
153-
chatMessageRepository.saveAll(unreadMessages);
154154
}
155155

156156
}

0 commit comments

Comments
 (0)