diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 8cf70c3e..5075092f 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -1,11 +1,28 @@ - + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://springboot-database.cbe6ouewo4p0.ap-northeast-2.rds.amazonaws.com:3306/sparta + + + + + + $ProjectFileDir$ + + mysql.8 true com.mysql.cj.jdbc.Driver jdbc:mysql://localhost:3306/nawabali + + + + + $ProjectFileDir$ diff --git a/src/main/java/com/nawabali/nawabali/controller/ChatController.java b/src/main/java/com/nawabali/nawabali/controller/ChatController.java index 1a0ad00f..3b18d60c 100644 --- a/src/main/java/com/nawabali/nawabali/controller/ChatController.java +++ b/src/main/java/com/nawabali/nawabali/controller/ChatController.java @@ -1,14 +1,17 @@ package com.nawabali.nawabali.controller; import com.nawabali.nawabali.dto.ChatDto; +//import com.nawabali.nawabali.dto.ChattingRequest; import com.nawabali.nawabali.service.ChatMessageService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.handler.annotation.DestinationVariable; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Controller; import java.util.List; @@ -16,24 +19,35 @@ @Tag(name = "채팅 API", description = "채팅 관련 API 입니다.") @RequiredArgsConstructor @Controller +@Slf4j (topic = "채팅방 로그!!!") public class ChatController { private final ChatMessageService chatMessageService; - private final SimpMessageSendingOperations messagingTemplate; - -// @Operation(summary = "채팅방(DM) 입장" , description = "MessageType : ENTER _ 입장") -// @MessageMapping("/chat/enter/message") -// public void enterMessage(ChatDto.ChatMessageDto message) { -// -// chatMessageService.enterMessage(message); -// -// } + private final SimpMessagingTemplate simpMessagingTemplate; + + @Operation(summary = "채팅방(DM) 입장" , description = "MessageType : ENTER _ 입장") + @MessageMapping("/chat/enter/message/{chatRoomId}") + public void enterMessage(@DestinationVariable Long chatRoomId, ChatDto.ChatMessageDto message) { + + chatMessageService.enterMessage(chatRoomId, message); + + } @Operation(summary = "채팅(DM) 전송" , description = "MessageType : TALK _ 메세지 전송") @MessageMapping("/chat/message/{chatRoomId}") public void message(@DestinationVariable Long chatRoomId, @Payload ChatDto.ChatMessageDto message) { // roomid 따로 받을지 이렇게 할지 물어보기 chatMessageService.message(chatRoomId, message); + log.info("정보확인 {} 이 방에서 {} 이 반환값", chatRoomId, message.getMessage()); } // sender command + +// @MessageMapping ("/chat/message/{chatRoomId}") +// public void chat (@DestinationVariable Long chatRoomId, ChattingRequest chattingRequest) { +// simpMessagingTemplate.convertAndSend("/sub/chat/room/" + chatRoomId, chattingRequest.getMessage()); +// log.info("Message [{}] send by member : {} to chatting room:{}",chattingRequest.getMessage(), chattingRequest.getUserId(), chatRoomId); +// } + + + } \ No newline at end of file diff --git a/src/main/java/com/nawabali/nawabali/dto/ChattingRequest.java b/src/main/java/com/nawabali/nawabali/dto/ChattingRequest.java new file mode 100644 index 00000000..9c814c81 --- /dev/null +++ b/src/main/java/com/nawabali/nawabali/dto/ChattingRequest.java @@ -0,0 +1,16 @@ +//package com.nawabali.nawabali.dto; +// +//import lombok.*; +// +//@Getter +//@Builder +//@AllArgsConstructor (access = AccessLevel.PROTECTED) +//@NoArgsConstructor (access = AccessLevel.PROTECTED) +//public class ChattingRequest { +// +// private Long id; +// private Long userId; +// private String sender; +// private String message; +// +//} diff --git a/src/main/java/com/nawabali/nawabali/service/ChatMessageService.java b/src/main/java/com/nawabali/nawabali/service/ChatMessageService.java index d953d42d..4bec160d 100644 --- a/src/main/java/com/nawabali/nawabali/service/ChatMessageService.java +++ b/src/main/java/com/nawabali/nawabali/service/ChatMessageService.java @@ -15,6 +15,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.simp.SimpMessageSendingOperations; import org.springframework.stereotype.Service; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.core.JsonProcessingException; import java.time.LocalDateTime; import java.util.ArrayList; @@ -35,53 +37,54 @@ public class ChatMessageService { private final ChatRoomRepository chatRoomRepository; private final SimpMessageSendingOperations messagingTemplate; private final NotificationService notificationService; + private ObjectMapper objectMapper; // 입장 -// public void enterMessage(ChatDto.ChatMessageDto message) { -// -// User userOptional = userRepository.findById(message.getUserId()) -// .orElseThrow(()-> new CustomException(ErrorCode.FORBIDDEN_CHATMESSAGE)); -// log.debug("유저 인포" + userOptional); -// -// Chat.ChatRoom chatRoom = chatRoomRepository.findById(message.getRoomId()) -// .orElseThrow(()-> new CustomException(ErrorCode.FORBIDDEN_CHATMESSAGE)); -// log.debug("chatroom roomid 찾기" + chatRoom); -// -// if (!chatRoomRepository.findByIdAndUserId(chatRoom.getId(),userOptional.getId()).isPresent()){ -// message.setMessage(message.getSender() + "님이 입장하셨습니다."); -// log.debug("메세지가 잘 들어오는지" + message); -// messagingTemplate.convertAndSend("/chat/enter/message" + message.getRoomId(), message); -// -// Chat.ChatRoom chatRoomSave = Chat.ChatRoom.builder() -// .roomName(chatRoom.getRoomName()) -// .roomNumber(chatRoom.getRoomNumber()) -// .user(userOptional) -// .chatRoomEnum(GROUP) -// .build(); -// -// chatRoomRepository.save(chatRoomSave); -// log.debug("세이브 된 내용" + chatRoomSave); -// } -// -// // 읽지 않은 메세지 읽음 표시 -// List chatMessageList = chatMessageRepository.findByChatRoomIdAndUserId(chatRoom.getId(), userOptional.getId()) -// .orElseThrow(()-> new CustomException(ErrorCode.FORBIDDEN_CHATMESSAGE)); -// log.debug("메세지 리스트" + chatMessageList); -// -// for (Chat.ChatMessage user : chatMessageList) { -// Chat.ChatMessage chatMessage = new Chat.ChatMessage(); -// chatMessage.update(true); -// chatMessageRepository.save(chatMessage); -// log.debug("메세지?!" + chatMessage); -// } -// -// } + public void enterMessage(Long chatRoomId, ChatDto.ChatMessageDto message) { + + User userOptional = userRepository.findById(message.getUserId()) + .orElseThrow(()-> new CustomException(ErrorCode.FORBIDDEN_CHATMESSAGE)); + log.debug("유저 인포" + userOptional); + + Chat.ChatRoom chatRoom = chatRoomRepository.findById(chatRoomId) + .orElseThrow(()-> new CustomException(ErrorCode.FORBIDDEN_CHATMESSAGE)); + log.debug("chatroom roomid 찾기" + chatRoom); + + if (!chatRoomRepository.findByIdAndUserId(chatRoom.getId(),userOptional.getId()).isPresent()){ + message.setMessage(message.getSender() + "님이 입장하셨습니다."); + log.debug("메세지가 잘 들어오는지" + message); + messagingTemplate.convertAndSend("/chat/enter/message" + chatRoomId, message); + + Chat.ChatRoom chatRoomSave = Chat.ChatRoom.builder() + .roomName(chatRoom.getRoomName()) + .roomNumber(chatRoom.getRoomNumber()) + .user(userOptional) + .chatRoomEnum(GROUP) + .build(); + + chatRoomRepository.save(chatRoomSave); + log.debug("세이브 된 내용" + chatRoomSave); + } + + // 읽지 않은 메세지 읽음 표시 + List chatMessageList = chatMessageRepository.findByChatRoomIdAndUserId(chatRoom.getId(), userOptional.getId()) + .orElseThrow(()-> new CustomException(ErrorCode.FORBIDDEN_CHATMESSAGE)); + log.debug("메세지 리스트" + chatMessageList); + + for (Chat.ChatMessage user : chatMessageList) { + Chat.ChatMessage chatMessage = new Chat.ChatMessage(); + chatMessage.update(true); + chatMessageRepository.save(chatMessage); + log.debug("메세지?!" + chatMessage); + } + + } // 메세지 보내기 public void message(Long chatRoomId, ChatDto.ChatMessageDto message) { User userOptional = userRepository.findById(message.getUserId()) - .orElseThrow(()-> new CustomException(ErrorCode.FORBIDDEN_CHATMESSAGE)); + .orElseThrow(()-> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); Chat.ChatRoom chatRoom = chatRoomRepository.findById(chatRoomId) @@ -130,11 +133,27 @@ public void message(Long chatRoomId, ChatDto.ChatMessageDto message) { // chatMessageResponseDtoList.add(chatMessageResponseDto); - messagingTemplate.convertAndSend("/sub/chat/message" + chatRoomId, message); + try { + String jsonResponse = objectMapper.writeValueAsString(chatMessageResponseDto); + messagingTemplate.convertAndSend("/sub/chat/room/" + chatRoomId, jsonResponse); + log.info("Message sent in room {}: sender: {}, message: {}, user ID: {}, created at {}", chatRoomId, chatMessageResponseDto.getSender(), chatMessageResponseDto.getMessage(), chatMessageResponseDto.getUserId(), chatMessageResponseDto.getCreatedMessageAt()); + } catch (JsonProcessingException e) { + log.error("Error converting message to JSON", e); + } + + messagingTemplate.convertAndSend("/sub/chat/room/" + chatRoomId, chatMessageResponseDto); + log.info("정보확인 {} 이 방에서 새로운 메시지가 도착했습니다. 보낸 사람: {}, 메시지 내용: {}, 유저 아이디 : {}, 만든 시간 {}", chatRoomId, chatMessageResponseDto.getSender(), chatMessageResponseDto.getMessage(), chatMessageResponseDto.getUserId(), chatMessageResponseDto.getCreatedMessageAt()); + } + + // notificationService.notifyMessage(chatRoom.getRoomNumber(), message.getUserId(), message.getSender()); -// messagingTemplate.convertAndSend("/chat/message" + chatRoomId, message); + messagingTemplate.convertAndSend("/sub/chat/room/" + chatRoomId, message); + log.info("정보확인 {} 이 방에서 새로운 메시지가 도착했습니다. 보낸 사람: {}, 메시지 내용: {}, 유저 아이디 : {}", chatRoomId, message.getSender(), message.getMessage(), message.getUserId(), message.getCreatedMessageAt()); + } + + } \ No newline at end of file diff --git a/src/main/java/com/nawabali/nawabali/service/ChatRoomService.java b/src/main/java/com/nawabali/nawabali/service/ChatRoomService.java index 4868dcc1..9360293e 100644 --- a/src/main/java/com/nawabali/nawabali/service/ChatRoomService.java +++ b/src/main/java/com/nawabali/nawabali/service/ChatRoomService.java @@ -158,7 +158,7 @@ public List loadMessage(Long roomId, User user) { .sender(chatMessage.getSender()) // .nickname / url, id .message(chatMessage.getMessage()) - .createdMessageAt(chatMessage.getCreatedMessageAt()) +// .createdMessageAt(chatMessage.getCreatedMessageAt()) .build()) .collect(Collectors.toList()); }