@@ -126,14 +126,15 @@ else if (currentStep >= 1 && currentStep <= 4) {
126126
127127 // ========== 3순위: 기본 일반 대화 ==========
128128 log .info ("[DEFAULT] 일반 대화 모드 - userId: {}" , requestDto .getUserId ());
129- String response = generateAIResponse (requestDto );
129+ ChatConversation savedResponse = generateAIResponse (requestDto );
130130
131131 return ChatResponseDto .builder ()
132+ .id (savedResponse .getId ())
132133 .userId (requestDto .getUserId ())
133- .message (response )
134+ .message (savedResponse . getMessage () )
134135 .sender (MessageSender .CHATBOT )
135136 .type (MessageType .TEXT )
136- .createdAt (LocalDateTime . now ())
137+ .createdAt (savedResponse . getCreatedAt ())
137138 .build ();
138139
139140 } catch (Exception e ) {
@@ -172,9 +173,10 @@ private String buildConversationContext(List<ChatConversation> recentChats) {
172173
173174 /**
174175 * 대화 저장 - 변경사항: 사용자 메시지와 봇 응답을 각각 별도로 저장
176+ * @return 저장된 봇 응답 엔티티 (id 포함)
175177 */
176178 @ Transactional
177- public void saveConversation (ChatRequestDto requestDto , String response ) {
179+ public ChatConversation saveConversation (ChatRequestDto requestDto , String response ) {
178180 // 1. 사용자 메시지 저장
179181 ChatConversation userMessage = ChatConversation .builder ()
180182 .userId (requestDto .getUserId ())
@@ -191,7 +193,7 @@ public void saveConversation(ChatRequestDto requestDto, String response) {
191193 .sender (MessageSender .CHATBOT )
192194 .createdAt (LocalDateTime .now ())
193195 .build ();
194- chatConversationRepository .save (botResponse );
196+ return chatConversationRepository .save (botResponse );
195197 }
196198
197199 /**
@@ -356,8 +358,9 @@ private String postProcessResponse(String response, InternalMessageType type) {
356358
357359 /**
358360 * AI 응답 생성
361+ * @return 저장된 봇 응답 엔티티 (id 포함)
359362 */
360- private String generateAIResponse (ChatRequestDto requestDto ) {
363+ private ChatConversation generateAIResponse (ChatRequestDto requestDto ) {
361364 log .info ("Normal chat mode for userId: {}" , requestDto .getUserId ());
362365
363366 // 메시지 타입 감지 (내부 enum 사용)
@@ -384,10 +387,8 @@ private String generateAIResponse(ChatRequestDto requestDto) {
384387 // 응답 후처리
385388 response = postProcessResponse (response , messageType );
386389
387- // 대화 저장 - 사용자 메시지와 봇 응답을 각각 저장
388- saveConversation (requestDto , response );
389-
390- return response ;
390+ // 대화 저장 - 사용자 메시지와 봇 응답을 각각 저장하고 저장된 봇 응답 반환
391+ return saveConversation (requestDto , response );
391392 }
392393
393394 /**
@@ -442,14 +443,15 @@ private boolean isStepRecommendationTrigger(String message) {
442443 * 일반 대화와 구분하여 추천에 특화된 응답 생성
443444 */
444445 private ChatResponseDto generateAIResponseWithContext (ChatRequestDto requestDto , String mode ) {
445- String response = generateAIResponse (requestDto );
446+ ChatConversation savedResponse = generateAIResponse (requestDto );
446447
447448 return ChatResponseDto .builder ()
449+ .id (savedResponse .getId ())
448450 .userId (requestDto .getUserId ())
449- .message (response )
451+ .message (savedResponse . getMessage () )
450452 .sender (MessageSender .CHATBOT )
451453 .type (MessageType .TEXT )
452- .createdAt (LocalDateTime . now ())
454+ .createdAt (savedResponse . getCreatedAt ())
453455 .metaData (ChatResponseDto .MetaData .builder ()
454456 .actionType (mode )
455457 .currentStep (0 )
@@ -518,6 +520,24 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) {
518520 type = MessageType .RADIO_OPTIONS ;
519521 }
520522
523+ // 사용자 메시지 저장 (단계별 추천 요청)
524+ ChatConversation userMessage = ChatConversation .builder ()
525+ .userId (requestDto .getUserId ())
526+ .message (requestDto .getMessage ())
527+ .sender (MessageSender .USER )
528+ .createdAt (LocalDateTime .now ())
529+ .build ();
530+ chatConversationRepository .save (userMessage );
531+
532+ // 봇 응답 저장
533+ ChatConversation botResponse = ChatConversation .builder ()
534+ .userId (requestDto .getUserId ())
535+ .message (message )
536+ .sender (MessageSender .CHATBOT )
537+ .createdAt (LocalDateTime .now ())
538+ .build ();
539+ ChatConversation savedResponse = chatConversationRepository .save (botResponse );
540+
521541 // 메타데이터 포함
522542 ChatResponseDto .MetaData metaData = ChatResponseDto .MetaData .builder ()
523543 .currentStep (currentStep )
@@ -527,13 +547,14 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) {
527547 .build ();
528548
529549 return ChatResponseDto .builder ()
550+ .id (savedResponse .getId ())
530551 .userId (requestDto .getUserId ())
531552 .message (message )
532553 .sender (MessageSender .CHATBOT )
533554 .type (type )
534555 .stepData (stepData )
535556 .metaData (metaData )
536- .createdAt (LocalDateTime . now ())
557+ .createdAt (savedResponse . getCreatedAt ())
537558 .build ();
538559 }
539560
0 commit comments