diff --git a/src/main/java/cmf/commitField/domain/chat/chatMessage/controller/response/ChatMsgResponse.java b/src/main/java/cmf/commitField/domain/chat/chatMessage/controller/response/ChatMsgResponse.java index 1c93f4f..88c97eb 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatMessage/controller/response/ChatMsgResponse.java +++ b/src/main/java/cmf/commitField/domain/chat/chatMessage/controller/response/ChatMsgResponse.java @@ -10,6 +10,7 @@ @AllArgsConstructor @Builder public class ChatMsgResponse { + private Long chatMsgId; private Long roomId; //사용자(user) private String from; diff --git a/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java b/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java index 38a073b..79b71df 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java +++ b/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java @@ -33,6 +33,8 @@ public class ChatMessageServiceImpl implements ChatMessageService { private final ChatMessageCustomRepository chatMessageCustomRepository; private final UserChatRoomRepository userChatRoomRepository; + // 커밋용 주석 + @Override @Transactional public ChatMsgResponse sendMessage(ChatMsgRequest message, Long userId, Long roomId) { @@ -48,14 +50,19 @@ public ChatMsgResponse sendMessage(ChatMsgRequest message, Long userId, Long roo .user(findUser) .chatRoom(chatRoom) .build(); - // Response + + // 메시지 저장 + ChatMsg savedMsg = chatMessageRepository.save(chatMsg); + + // Response - 메시지 ID 추가 ChatMsgResponse response = ChatMsgResponse.builder() + .chatMsgId(savedMsg.getId()) // 저장된 메시지의 ID 추가 .roomId(roomId) .from(findUser.getNickname()) .message(message.getMessage()) .sendAt(chatMsg.getCreatedAt()) .build(); - chatMessageRepository.save(chatMsg); + return response; } @@ -86,4 +93,4 @@ public List getRoomChatMsgList(Long roomId, Long userId, Long lastId } return chatMsgDtos; } -} +} \ No newline at end of file diff --git a/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java b/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java index 16a8349..6c9e2d0 100644 --- a/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java +++ b/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java @@ -173,14 +173,15 @@ private void handleChatMessage(WebSocketSession session, JsonNode jsonNode) { Long roomId = jsonNode.get("roomId").asLong(); Long userId = jsonNode.get("userId").asLong(); String message = jsonNode.get("message").asText(); + String from = jsonNode.has("from") ? jsonNode.get("from").asText() : null; + + log.info("채팅 메시지: roomId={}, userId={}, message={}, from={}", roomId, userId, message, from); if (message == null || message.trim().isEmpty()) { sendErrorMessage(session, "메시지 내용이 비어있습니다."); return; } - log.info("채팅 메시지: roomId={}, userId={}, message={}", roomId, userId, message); - // 사용자 정보 검증 User user = userRepository.findById(userId).orElse(null); if (user == null) { @@ -194,8 +195,20 @@ private void handleChatMessage(WebSocketSession session, JsonNode jsonNode) { ChatMsgRequest chatMsgRequest = new ChatMsgRequest(message); ChatMsgResponse response = chatMessageService.sendMessage(chatMsgRequest, userId, roomId); - // 메시지 포맷 변환하여 전송 - String messageJson = objectMapper.writeValueAsString(response); + // 웹소켓 메시지 포맷 생성 (클라이언트와 일치시킴) + Map wsMessage = new HashMap<>(); + wsMessage.put("type", "CHAT"); + wsMessage.put("roomId", roomId); + wsMessage.put("userId", userId); + wsMessage.put("chatMsgId", response.getChatMsgId()); // DB에 저장된 메시지 ID 추가 + wsMessage.put("from", response.getFrom()); + wsMessage.put("nickname", response.getFrom()); // 클라이언트 호환성을 위해 두 필드 모두 설정 + wsMessage.put("message", message); + wsMessage.put("sendAt", response.getSendAt().toString()); + + // 메시지 JSON 변환 + String messageJson = objectMapper.writeValueAsString(wsMessage); + log.info("Broadcasting message: {}", messageJson); // 해당 채팅방의 모든 세션에 메시지 브로드캐스트 broadcastMessageToRoom(roomId, messageJson); @@ -223,9 +236,11 @@ private void broadcastMessageToRoom(Long roomId, String message) { for (WebSocketSession session : roomSessions) { try { if (session.isOpen()) { + log.debug("Broadcasting to session {}", session.getId()); session.sendMessage(new TextMessage(message)); } else { failedSessions.add(session); + log.debug("Session closed, adding to failed sessions: {}", session.getId()); } } catch (IOException e) { log.error("메시지 브로드캐스트 중 오류: {}", e.getMessage()); diff --git "a/src/main/resources/static/uploads/1741311398899_\354\212\244\355\201\254\353\246\260\354\203\267 2025-03-07 10.36.28.png" "b/src/main/resources/static/uploads/1741311398899_\354\212\244\355\201\254\353\246\260\354\203\267 2025-03-07 10.36.28.png" new file mode 100644 index 0000000..5f45ac4 Binary files /dev/null and "b/src/main/resources/static/uploads/1741311398899_\354\212\244\355\201\254\353\246\260\354\203\267 2025-03-07 10.36.28.png" differ diff --git "a/src/main/resources/static/uploads/1741311623102_\354\212\244\355\201\254\353\246\260\354\203\267 2025-03-07 10.40.18.png" "b/src/main/resources/static/uploads/1741311623102_\354\212\244\355\201\254\353\246\260\354\203\267 2025-03-07 10.40.18.png" new file mode 100644 index 0000000..d59c959 Binary files /dev/null and "b/src/main/resources/static/uploads/1741311623102_\354\212\244\355\201\254\353\246\260\354\203\267 2025-03-07 10.40.18.png" differ