1212import com .back .domain .cocktail .entity .Cocktail ;
1313import com .back .domain .cocktail .enums .AlcoholBaseType ;
1414import com .back .domain .cocktail .enums .AlcoholStrength ;
15- import com .back .domain .cocktail .enums .CocktailType ;
1615import com .back .domain .cocktail .repository .CocktailRepository ;
1716import jakarta .annotation .PostConstruct ;
1817import lombok .RequiredArgsConstructor ;
@@ -102,7 +101,7 @@ public ChatResponseDto sendMessage(ChatRequestDto requestDto) {
102101 log .info ("질문형 추천 모드 진입 - userId: {}" , requestDto .getUserId ());
103102 return generateAIResponseWithContext (requestDto , "질문형 추천" );
104103 }
105- else if (currentStep >= 1 && currentStep <= 3 ) {
104+ else if (currentStep >= 1 && currentStep <= 4 ) {
106105 // 단계별 추천
107106 log .info ("단계별 추천 모드 진입 - Step: {}, userId: {}" ,
108107 currentStep , requestDto .getUserId ());
@@ -496,10 +495,16 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) {
496495 break ;
497496
498497 case 3 :
499- stepData = getFinalRecommendations (
498+ stepData = null ;
499+ message = "좋아요! 이제 원하는 칵테일 스타일을 자유롭게 말씀해주세요 💬\n 없으면 'x', 또는 '없음' 과 같이 입력해주세요!" ;
500+ type = MessageType .INPUT ;
501+ break ;
502+
503+ case 4 :
504+ stepData = getFinalRecommendationsWithMessage (
500505 parseAlcoholStrength (requestDto .getSelectedAlcoholStrength ()),
501506 parseAlcoholBaseType (requestDto .getSelectedAlcoholBaseType ()),
502- null
507+ requestDto . getMessage ()
503508 );
504509 message = stepData .getStepTitle ();
505510 type = MessageType .CARD_LIST ; // 최종 추천은 카드 리스트
@@ -532,7 +537,7 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) {
532537 // 메타데이터 포함
533538 ChatResponseDto .MetaData metaData = ChatResponseDto .MetaData .builder ()
534539 .currentStep (currentStep )
535- .totalSteps (3 )
540+ .totalSteps (4 )
536541 .isTyping (true )
537542 .delay (300 )
538543 .build ();
@@ -632,20 +637,20 @@ private StepRecommendationResponseDto getAlcoholBaseTypeOptions(AlcoholStrength
632637 }
633638
634639
635- private StepRecommendationResponseDto getFinalRecommendations (
640+ private StepRecommendationResponseDto getFinalRecommendationsWithMessage (
636641 AlcoholStrength alcoholStrength ,
637642 AlcoholBaseType alcoholBaseType ,
638- CocktailType cocktailType ) {
643+ String userMessage ) {
639644 // 필터링 조건에 맞는 칵테일 검색
640645 // "ALL" 선택 시 해당 필터를 null로 처리하여 전체 검색
641646 List <AlcoholStrength > strengths = (alcoholStrength == null ) ? null : List .of (alcoholStrength );
642647 List <AlcoholBaseType > baseTypes = (alcoholBaseType == null ) ? null : List .of (alcoholBaseType );
643- List <CocktailType > cocktailTypes = (cocktailType == null ) ? null : List .of (cocktailType );
644648
649+ // userMessage를 키워드로 사용하여 검색
645650 Page <Cocktail > cocktailPage = cocktailRepository .searchWithFilters (
646- null , // 키워드 없음
651+ userMessage , // 사용자 입력 메시지를 키워드로 사용
647652 strengths ,
648- cocktailTypes ,
653+ null , // cocktailType 사용 안 함
649654 baseTypes ,
650655 PageRequest .of (0 , 3 ) // 최대 3개 추천
651656 );
@@ -668,7 +673,7 @@ private StepRecommendationResponseDto getFinalRecommendations(
668673 "마음에 드는 칵테일은 '킵' 버튼을 눌러 나만의 Bar에 저장해보세요!" ;
669674
670675 return new StepRecommendationResponseDto (
671- 3 ,
676+ 4 ,
672677 stepTitle ,
673678 null ,
674679 recommendations ,
0 commit comments