Skip to content

Commit

Permalink
Merge pull request #113 from Nawabali-project/feature/34/cicdNotifica…
Browse files Browse the repository at this point in the history
…tion

FIX : 메세지 전송 수정
  • Loading branch information
minnieming authored Apr 22, 2024
2 parents 1f57ae8 + b363741 commit a4e2400
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 53 deletions.
19 changes: 18 additions & 1 deletion .idea/dataSources.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 23 additions & 9 deletions src/main/java/com/nawabali/nawabali/controller/ChatController.java
Original file line number Diff line number Diff line change
@@ -1,39 +1,53 @@
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;

@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);
// }



}
16 changes: 16 additions & 0 deletions src/main/java/com/nawabali/nawabali/dto/ChattingRequest.java
Original file line number Diff line number Diff line change
@@ -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;
//
//}
103 changes: 61 additions & 42 deletions src/main/java/com/nawabali/nawabali/service/ChatMessageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 <Chat.ChatMessage> 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 <Chat.ChatMessage> 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)
Expand Down Expand Up @@ -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());

}


}
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ public List<ChatDto.ChatMessageDto> loadMessage(Long roomId, User user) {
.sender(chatMessage.getSender())
// .nickname / url, id
.message(chatMessage.getMessage())
.createdMessageAt(chatMessage.getCreatedMessageAt())
// .createdMessageAt(chatMessage.getCreatedMessageAt())
.build())
.collect(Collectors.toList());
}
Expand Down

0 comments on commit a4e2400

Please sign in to comment.