@@ -62,14 +62,6 @@ public class ChatbotService {
6262 private String responseRules ;
6363 private ChatClient chatClient ;
6464
65- // 로딩 메시지 상수
66- private static final String RECOMMENDATION_LOADING_MESSAGE =
67- "당신에게 어울리는 칵테일은? 두구❤️두구💛두구💚두구💙두구💜두구🖤두구🤍두구🤎" ;
68-
69- // 처리 완료 플래그 키워드
70- private static final String PROCESS_STEP_RECOMMENDATION = "PROCESS_STEP_RECOMMENDATION" ;
71- private static final String PROCESS_QA_RECOMMENDATION = "PROCESS_QA_RECOMMENDATION" ;
72-
7365 @ PostConstruct
7466 public void init () throws IOException {
7567 this .systemPrompt = StreamUtils .copyToString (
@@ -150,50 +142,9 @@ public ChatResponseDto sendMessage(ChatRequestDto requestDto) {
150142 .build ();
151143 }
152144
153- // 실제 질문이 들어온 경우 - 먼저 로딩 메시지 반환
154- if (requestDto .getMessage () != null && !requestDto .getMessage ().trim ().isEmpty ()) {
155- // 로딩 메시지인지 확인 (두구두구 메시지 이후의 실제 처리 요청)
156- if (requestDto .getMessage ().contains ("PROCESS_RECOMMENDATION" )) {
157- log .info ("질문형 추천 실제 처리 - userId: {}" , requestDto .getUserId ());
158- return generateAIResponseWithContext (requestDto , "질문형 추천" );
159- }
160-
161- // 사용자 질문 저장
162- ChatConversation userQuestion = ChatConversation .builder ()
163- .userId (requestDto .getUserId ())
164- .message (requestDto .getMessage ())
165- .sender (MessageSender .USER )
166- .createdAt (LocalDateTime .now ())
167- .build ();
168- chatConversationRepository .save (userQuestion );
169-
170- // 고정 로딩 메시지
171- String loadingMessage = "당신에게 어울리는 칵테일은?\n 두구❤️두구💛두구💚두구💙두구💜두구🖤두구🤍두구🤎" ;
172-
173- ChatConversation loadingBot = ChatConversation .builder ()
174- .userId (requestDto .getUserId ())
175- .message (loadingMessage )
176- .sender (MessageSender .CHATBOT )
177- .createdAt (LocalDateTime .now ())
178- .build ();
179- ChatConversation savedLoading = chatConversationRepository .save (loadingBot );
180-
181- // 로딩 메시지 반환 (FE에서 이후 자동으로 실제 추천 요청)
182- return ChatResponseDto .builder ()
183- .id (savedLoading .getId ())
184- .userId (requestDto .getUserId ())
185- .message (loadingMessage )
186- .sender (MessageSender .CHATBOT )
187- .type (MessageType .LOADING )
188- .createdAt (savedLoading .getCreatedAt ())
189- .metaData (ChatResponseDto .MetaData .builder ()
190- .currentStep (0 )
191- .actionType ("LOADING_QA" )
192- .isTyping (true )
193- .delay (2000 ) // 2초 후 자동 요청
194- .build ())
195- .build ();
196- }
145+ // 실제 질문이 들어온 경우 AI 응답 생성
146+ log .info ("질문형 추천 모드 진입 - userId: {}" , requestDto .getUserId ());
147+ return generateAIResponseWithContext (requestDto , "질문형 추천" );
197148 }
198149 else if (currentStep >= 1 && currentStep <= 4 ) {
199150 // 단계별 추천
@@ -594,7 +545,7 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) {
594545
595546 case 2 :
596547 stepData = getAlcoholBaseTypeOptions (parseAlcoholStrength (requestDto .getSelectedAlcoholStrength ()));
597- message = "좋은 선택이네요! 이제 베이스가 될 술을 선택해주세요 🍸" ;
548+ message = "좋은 선택이네요! \n 이제 베이스가 될 술을 선택해주세요 🍸" ;
598549 type = MessageType .RADIO_OPTIONS ;
599550 break ;
600551
@@ -611,65 +562,10 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) {
611562 break ;
612563
613564 case 4 :
614- // Step 4에서 로딩 메시지 처리
615- if (!"PROCESS_STEP_RECOMMENDATION" .equals (requestDto .getMessage ())) {
616- // 사용자 입력 저장 (Step 3의 답변) 및 userStyleInput에 저장
617- if (requestDto .getMessage () != null && !requestDto .getMessage ().trim ().isEmpty ()) {
618- // DB에 저장
619- ChatConversation userInput = ChatConversation .builder ()
620- .userId (requestDto .getUserId ())
621- .message (requestDto .getMessage ())
622- .sender (MessageSender .USER )
623- .createdAt (LocalDateTime .now ())
624- .build ();
625- chatConversationRepository .save (userInput );
626-
627- // userStyleInput에 저장 (다음 요청에서 사용)
628- requestDto .setUserStyleInput (requestDto .getMessage ());
629- log .info ("Step 3 사용자 입력 저장: {}" , requestDto .getMessage ());
630- }
631-
632- // 고정 로딩 메시지
633- String loadingMessage = "당신에게 어울리는 칵테일은?\n 두구❤️두구💛두구💚두구💙두구💜두구🖤두구🤍두구🤎" ;
634-
635- ChatConversation loadingBot = ChatConversation .builder ()
636- .userId (requestDto .getUserId ())
637- .message (loadingMessage )
638- .sender (MessageSender .CHATBOT )
639- .createdAt (LocalDateTime .now ())
640- .build ();
641- ChatConversation savedLoading = chatConversationRepository .save (loadingBot );
642-
643- // 로딩 메시지 반환
644- return ChatResponseDto .builder ()
645- .id (savedLoading .getId ())
646- .userId (requestDto .getUserId ())
647- .message (loadingMessage )
648- .sender (MessageSender .CHATBOT )
649- .type (MessageType .LOADING )
650- .createdAt (savedLoading .getCreatedAt ())
651- .metaData (ChatResponseDto .MetaData .builder ()
652- .currentStep (4 )
653- .totalSteps (4 )
654- .actionType ("LOADING_STEP" )
655- .isTyping (true )
656- .delay (2000 ) // 2초 후 자동 요청
657- .build ())
658- .stepData (new StepRecommendationResponseDto (
659- 4 ,
660- null ,
661- null ,
662- null ,
663- false
664- ))
665- .build ();
666- }
667-
668- // 실제 추천 처리 - userStyleInput 사용 (PROCESS_STEP_RECOMMENDATION 키워드 아님)
669565 stepData = getFinalRecommendationsWithMessage (
670- parseAlcoholStrength (requestDto .getSelectedAlcoholStrength ()),
671- parseAlcoholBaseType (requestDto .getSelectedAlcoholBaseType ()),
672- requestDto .getUserStyleInput () // message 대신 userStyleInput 사용
566+ parseAlcoholStrength (requestDto .getSelectedAlcoholStrength ()),
567+ parseAlcoholBaseType (requestDto .getSelectedAlcoholBaseType ()),
568+ requestDto .getMessage ()
673569 );
674570 message = stepData .getStepTitle ();
675571 type = MessageType .CARD_LIST ;
0 commit comments