WebSocketController.java
package com.newbit.coffeeletter.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Controller;
import com.newbit.coffeeletter.domain.chat.MessageType;
import com.newbit.coffeeletter.dto.ChatMessageDTO;
import com.newbit.coffeeletter.service.ChatService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@Tag(name = "WebSocket 채팅 API", description = "WebSocket을 통한 커피레터 실시간 채팅 API")
public class WebSocketController {
private final ChatService chatService;
@Autowired
public WebSocketController(@Qualifier("chatServiceImpl") ChatService chatService) {
this.chatService = chatService;
}
@Operation(summary = "메시지 전송", description = "WebSocket을 통해 메시지를 전송합니다.")
@MessageMapping("/chat.sendMessage")
public ChatMessageDTO sendMessage(@Payload ChatMessageDTO chatMessage) {
return chatService.sendMessage(chatMessage);
}
@Operation(summary = "사용자 입장", description = "WebSocket을 통해 채팅방에 사용자를 추가합니다.")
@MessageMapping("/chat.addUser/{roomId}")
public void addUser(
@Parameter(description = "채팅방 ID") @DestinationVariable String roomId,
@Payload ChatMessageDTO chatMessage) {
chatMessage.setType(MessageType.ENTER);
chatService.sendSystemMessage(roomId, chatMessage.getSenderName() + "님이 입장하셨습니다.");
}
}