Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ public enum MessageType {
}

private MessageType messageType;
private Long chatRoomId;
private String sender; // 보낸 사람
private String content; // 메시지 내용
private LocalDateTime sendTime;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<MessageInfo> findChatMessageList(Long roomId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Loading