diff --git a/src/main/java/com/back/catchmate/domain/chat/controller/ChatController.java b/src/main/java/com/back/catchmate/domain/chat/controller/ChatController.java index 28548ea..ee7bf19 100644 --- a/src/main/java/com/back/catchmate/domain/chat/controller/ChatController.java +++ b/src/main/java/com/back/catchmate/domain/chat/controller/ChatController.java @@ -1,11 +1,14 @@ package com.back.catchmate.domain.chat.controller; import com.back.catchmate.domain.chat.dto.ChatRequest; +import com.back.catchmate.domain.chat.dto.ChatRequest.ChatMessageRequest; import com.back.catchmate.domain.chat.dto.ChatResponse.MessageInfo; import com.back.catchmate.domain.chat.service.ChatService; 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.SendTo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @@ -19,9 +22,10 @@ public class ChatController { private final ChatService chatService; - @MessageMapping("/chat.sendMessage") - public void sendMessage(ChatRequest.ChatMessageRequest request) { - chatService.sendMessage(request); + @MessageMapping("/chat.{chatRoomId}") + @SendTo("/topic/chat.{chatRoomId}") + public void sendMessage(@DestinationVariable Long chatRoomId, ChatMessageRequest request) { + chatService.sendMessage(chatRoomId, request); } @GetMapping(value = "/chat/chatRoom/{roomId}") diff --git a/src/main/java/com/back/catchmate/domain/chat/dto/ChatRequest.java b/src/main/java/com/back/catchmate/domain/chat/dto/ChatRequest.java index 47c3d93..15fe506 100644 --- a/src/main/java/com/back/catchmate/domain/chat/dto/ChatRequest.java +++ b/src/main/java/com/back/catchmate/domain/chat/dto/ChatRequest.java @@ -18,7 +18,6 @@ public enum MessageType { } private MessageType messageType; - private Long chatRoomId; private String sender; // 보낸 사람 private String content; // 메시지 내용 private LocalDateTime sendTime; diff --git a/src/main/java/com/back/catchmate/domain/chat/service/ChatService.java b/src/main/java/com/back/catchmate/domain/chat/service/ChatService.java index 98fceae..8b1d0af 100644 --- a/src/main/java/com/back/catchmate/domain/chat/service/ChatService.java +++ b/src/main/java/com/back/catchmate/domain/chat/service/ChatService.java @@ -1,12 +1,11 @@ package com.back.catchmate.domain.chat.service; import com.back.catchmate.domain.chat.dto.ChatRequest.ChatMessageRequest; -import com.back.catchmate.domain.chat.dto.ChatResponse; import com.back.catchmate.domain.chat.dto.ChatResponse.MessageInfo; import reactor.core.publisher.Flux; public interface ChatService { - void sendMessage(ChatMessageRequest request); + void sendMessage(Long chatRoomId, ChatMessageRequest request); Flux findChatMessageList(Long roomId); } diff --git a/src/main/java/com/back/catchmate/domain/chat/service/ChatServiceImpl.java b/src/main/java/com/back/catchmate/domain/chat/service/ChatServiceImpl.java index 3e28a8d..ed4159a 100644 --- a/src/main/java/com/back/catchmate/domain/chat/service/ChatServiceImpl.java +++ b/src/main/java/com/back/catchmate/domain/chat/service/ChatServiceImpl.java @@ -6,33 +6,42 @@ import com.back.catchmate.domain.chat.entity.ChatMessage; import com.back.catchmate.domain.chat.repository.ChatMessageRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.servlet.function.support.RouterFunctionMapping; import reactor.core.publisher.Flux; import static com.back.catchmate.domain.chat.dto.ChatRequest.ChatMessageRequest.*; +@Slf4j @Service @RequiredArgsConstructor public class ChatServiceImpl implements ChatService { private final SimpMessagingTemplate messagingTemplate; private final ChatMessageRepository chatMessageRepository; + private final RouterFunctionMapping routerFunctionMapping; // 메시지를 특정 채팅방으로 전송 @Transactional - public void sendMessage(ChatMessageRequest request) { + public void sendMessage(Long chatRoomId, ChatMessageRequest request) { if (request.getMessageType() == MessageType.TALK) { ChatMessage chatMessage = new ChatMessage( - request.getChatRoomId(), request.getContent(), request.getSender() + chatRoomId, request.getContent(), request.getSender() ); + // DB에 메시지 저장 - System.out.println("Saving chat message: " + chatMessage); // 디버깅 - chatMessageRepository.insert(chatMessage).block(); + chatMessageRepository.insert(chatMessage) + .doOnSuccess(savedMessage -> + log.info("Saving chat message: {}", chatMessage)) + .subscribe(); } - String destination = "/topic/chatRoom/" + request.getChatRoomId(); - System.out.println("Sending message to: " + destination); // 디버깅 + String destination = "/topic/chat." + chatRoomId; + log.info("Sending message to: {}", destination); // 디버깅 messagingTemplate.convertAndSend(destination, request); } diff --git a/src/main/java/com/back/catchmate/global/config/SecurityConfig.java b/src/main/java/com/back/catchmate/global/config/SecurityConfig.java index 288bc69..1318638 100644 --- a/src/main/java/com/back/catchmate/global/config/SecurityConfig.java +++ b/src/main/java/com/back/catchmate/global/config/SecurityConfig.java @@ -21,7 +21,7 @@ public class SecurityConfig { private final JwtService jwtService; private final UserRepository userRepository; - private static final String[] whiteList = {"/auth/**", "/users/additional-info", "/actuator/**", "/swagger-ui/**", "/swagger-resources/**", "/swagger/**", "/v3/api-docs/**", "/error/**", "/clubs/**"}; + private static final String[] whiteList = {"/auth/**", "/users/additional-info", "/actuator/**", "/swagger-ui/**", "/swagger-resources/**", "/swagger/**", "/v3/api-docs/**", "/error/**", "/clubs/**", "/ws/**"}; @Bean public WebSecurityCustomizer webSecurityCustomizer() {