@@ -95,9 +95,55 @@ public ChatResponseDto sendMessage(ChatRequestDto requestDto) {
9595 log .info ("[EXPLICIT] currentStep={}, userId={}, mode={}" ,
9696 currentStep , requestDto .getUserId (),
9797 currentStep == 0 ? "QA" : "STEP" );
98-
9998 if (currentStep == 0 ) {
100- // 질문형 추천 (일반 AI 대화)
99+ // 질문형 추천 선택 시 안내 메시지와 INPUT 타입 반환
100+ if ("QA" .equalsIgnoreCase (requestDto .getMessage ()) ||
101+ requestDto .getMessage ().contains ("질문형" )) {
102+
103+ log .info ("질문형 추천 시작 - userId: {}" , requestDto .getUserId ());
104+
105+ // 사용자 선택 메시지 저장
106+ ChatConversation userChoice = ChatConversation .builder ()
107+ .userId (requestDto .getUserId ())
108+ .message ("질문형 취향 찾기" )
109+ .sender (MessageSender .USER )
110+ .createdAt (LocalDateTime .now ())
111+ .build ();
112+ chatConversationRepository .save (userChoice );
113+
114+ String guideMessage = "칵테일에 관련된 질문을 입력해주세요!" ;
115+
116+ /*
117+
118+ String guideMessage = "좋아요! 질문형 추천을 시작할게요 🎯\n" +
119+ "칵테일에 관련된 질문을 자유롭게 입력해주세요!\n" +
120+ "예시: 달콤한 칵테일 추천해줘, 파티용 칵테일이 필요해, 초보자용 칵테일 알려줘";
121+ */
122+
123+ ChatConversation botGuide = ChatConversation .builder ()
124+ .userId (requestDto .getUserId ())
125+ .message (guideMessage )
126+ .sender (MessageSender .CHATBOT )
127+ .createdAt (LocalDateTime .now ())
128+ .build ();
129+ ChatConversation savedGuide = chatConversationRepository .save (botGuide );
130+
131+ // INPUT 타입으로 반환하여 사용자 입력 유도
132+ return ChatResponseDto .builder ()
133+ .id (savedGuide .getId ())
134+ .userId (requestDto .getUserId ())
135+ .message (guideMessage )
136+ .sender (MessageSender .CHATBOT )
137+ .type (MessageType .INPUT )
138+ .createdAt (savedGuide .getCreatedAt ())
139+ .metaData (ChatResponseDto .MetaData .builder ()
140+ .currentStep (0 )
141+ .actionType ("질문형 추천" )
142+ .build ())
143+ .build ();
144+ }
145+
146+ // 실제 질문이 들어온 경우 AI 응답 생성
101147 log .info ("질문형 추천 모드 진입 - userId: {}" , requestDto .getUserId ());
102148 return generateAIResponseWithContext (requestDto , "질문형 추천" );
103149 }
@@ -473,10 +519,22 @@ private ChatResponseDto createErrorResponse(String errorMessage) {
473519
474520 private ChatResponseDto handleStepRecommendation (ChatRequestDto requestDto ) {
475521 Integer currentStep = requestDto .getCurrentStep ();
522+
523+ // 단계별 추천 선택 시 처리
524+ if (currentStep == 1 && "STEP" .equalsIgnoreCase (requestDto .getMessage ())) {
525+ // 사용자 선택 메시지 저장
526+ ChatConversation userChoice = ChatConversation .builder ()
527+ .userId (requestDto .getUserId ())
528+ .message ("단계별 취향 찾기" )
529+ .sender (MessageSender .USER )
530+ .createdAt (LocalDateTime .now ())
531+ .build ();
532+ chatConversationRepository .save (userChoice );
533+ }
534+
476535 if (currentStep == null || currentStep <= 0 ) {
477536 currentStep = 1 ;
478537 }
479-
480538 StepRecommendationResponseDto stepData ;
481539 String message ;
482540 MessageType type ;
@@ -521,17 +579,7 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) {
521579 message = "단계별 맞춤 취향 추천을 시작합니다! 🎯" ;
522580 type = MessageType .RADIO_OPTIONS ;
523581 }
524-
525- // 사용자 메시지 저장 (단계별 추천 요청)
526- ChatConversation userMessage = ChatConversation .builder ()
527- .userId (requestDto .getUserId ())
528- .message (requestDto .getMessage ())
529- .sender (MessageSender .USER )
530- .createdAt (LocalDateTime .now ())
531- .build ();
532- chatConversationRepository .save (userMessage );
533-
534- // 봇 응답 저장
582+ // 봇 응답 저장 (사용자 메시지는 이미 위에서 저장)
535583 ChatConversation botResponse = ChatConversation .builder ()
536584 .userId (requestDto .getUserId ())
537585 .message (message )
0 commit comments