From d144b6c4ff8c9ee037b678a5ab36fc92060311fc Mon Sep 17 00:00:00 2001 From: Jeyong Date: Sun, 4 May 2025 12:22:31 +0900 Subject: [PATCH] =?UTF-8?q?[fix]=20=EC=B1=84=ED=8C=85=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20-=20=EC=9A=94=EC=B2=AD=EC=8B=9C=20userId=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Chat/controller/ChatController.java | 17 +++++++++---- .../domain/Chat/dto/request/ChatRequest.java | 9 ++++--- .../domain/Chat/dto/request/LLMRequest.java | 4 ++-- .../weakness/domain/Chat/entity/Chat.java | 4 ++-- .../domain/Chat/service/ChatService.java | 24 +++++++++++++------ .../domain/Chat/service/LLMClient.java | 4 ++-- 6 files changed, 41 insertions(+), 21 deletions(-) diff --git a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/controller/ChatController.java b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/controller/ChatController.java index 3ac984e..1cf0370 100644 --- a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/controller/ChatController.java +++ b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/controller/ChatController.java @@ -8,6 +8,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -19,16 +21,21 @@ public class ChatController { private final ChatService chatService; + @GetMapping("/chat/history/{userId}") + public List getHistory(@PathVariable Long userId) { + return chatService.getHistory(userId); + } + @MessageMapping("/chat.send") // 클라이언트 → /app/chat.send - public void handleChat(ChatRequest request, @LoginUser Users loginUser) { + public void handleChat(ChatRequest request) { // 1) 유저 메시지 저장 + 클라이언트에게 에코 - ChatResponse chatResponse = chatService.saveUserMessage(loginUser, request); - template.convertAndSend("/sub/" + loginUser.getUserId(), chatResponse); + ChatResponse chatResponse = chatService.saveUserMessage(request); + template.convertAndSend("/sub/" + request.getUserId(), chatResponse); // 2) LLM 호출 & 응답 저장 + 브로드캐스트 (동기 방식) - List llmResponses = chatService.askAI(loginUser, request); + List llmResponses = chatService.askAI(request); llmResponses.forEach(aiResp -> - template.convertAndSend("/sub/" + loginUser.getUserId(), aiResp) + template.convertAndSend("/sub/" + request.getUserId(), aiResp) ); } } diff --git a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/ChatRequest.java b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/ChatRequest.java index c5878e5..957c153 100644 --- a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/ChatRequest.java +++ b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/ChatRequest.java @@ -7,13 +7,16 @@ @NoArgsConstructor public class ChatRequest { + private Long userId; + private String message; - private ChatRequest(String message) { + private ChatRequest(Long userId, String message) { + this.userId = userId; this.message = message; } - public static ChatRequest of(String message) { - return new ChatRequest(message); + public static ChatRequest of(Long userId, String message) { + return new ChatRequest(userId, message); } } diff --git a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/LLMRequest.java b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/LLMRequest.java index 90bde8d..fae5251 100644 --- a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/LLMRequest.java +++ b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/dto/request/LLMRequest.java @@ -23,7 +23,7 @@ private LLMRequest(Long userId, String message, List history) { this.history = history; } - public static LLMRequest of(Users loginUser, ChatRequest request, List history) { - return new LLMRequest(loginUser.getUserId(), request.getMessage(), history); + public static LLMRequest of(ChatRequest request, List history) { + return new LLMRequest(request.getUserId(), request.getMessage(), history); } } diff --git a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/entity/Chat.java b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/entity/Chat.java index fd6c95d..8cd864a 100644 --- a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/entity/Chat.java +++ b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/entity/Chat.java @@ -42,8 +42,8 @@ private Chat(Long userId, ChatRole role, String message) { this.message = message; } - public static Chat of(Users user, ChatRequest request, ChatRole role) { - return new Chat(user.getUserId(), role, request.getMessage()); + public static Chat of(ChatRequest request) { + return new Chat(request.getUserId(), ChatRole.USER, request.getMessage()); } public static Chat of(ChatResponse response) { diff --git a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/ChatService.java b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/ChatService.java index a5a35e2..7d69958 100644 --- a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/ChatService.java +++ b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/ChatService.java @@ -7,36 +7,46 @@ import MathCaptain.weakness.domain.User.entity.Users; import MathCaptain.weakness.domain.common.enums.ChatRole; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.UUID; +@Slf4j @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class ChatService { - public static final ChatRole USER = ChatRole.USER; private final ChatRepository chatRepository; private final LLMClient llm; @Transactional - public ChatResponse saveUserMessage(Users loginUser, ChatRequest request) { - Chat message = Chat.of(loginUser, request, USER); + public ChatResponse saveUserMessage(ChatRequest request) { + log.info("userid {}", request.getUserId()); + log.info("message {}", request.getMessage()); + Chat message = Chat.of(request); Chat saved = chatRepository.save(message); return ChatResponse.of(saved); } - public List askAI(Users loginUser, ChatRequest request) { - List history = chatRepository.findAllByUserIdOrderBySendTimeAsc(loginUser.getUserId()); - List aiChats = llm.call(loginUser, history, request); + public List askAI(ChatRequest request) { + List history = chatRepository.findAllByUserIdOrderBySendTimeAsc(request.getUserId()); + List aiChats = llm.call(history, request); return aiChats.stream() .map(this::storeAndTransform) .toList(); } + @Transactional + public List getHistory(Long userId) { + List history = chatRepository.findAllByUserIdOrderBySendTimeAsc(userId); + return history.stream() + .map(ChatResponse::of) + .toList(); + } + private ChatResponse storeAndTransform(Chat message) { Chat saved = chatRepository.save(message); return ChatResponse.of(saved); diff --git a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/LLMClient.java b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/LLMClient.java index dbbd4e2..62d3510 100644 --- a/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/LLMClient.java +++ b/MathCaptain/weakness/src/main/java/MathCaptain/weakness/domain/Chat/service/LLMClient.java @@ -31,9 +31,9 @@ public class LLMClient { @Value("${llm.server.url}") private String baseUrl; - public List call(Users loginUser, List history, ChatRequest request) { + public List call(List history, ChatRequest request) { try { - LLMRequest llmRequest = LLMRequest.of(loginUser, request, history); + LLMRequest llmRequest = LLMRequest.of(request, history); ResponseEntity response = restTemplate.postForEntity( // TODO : 엔드포인트 수정