diff --git a/src/main/java/com/back/domain/chatbot/dto/ChatRequestDto.java b/src/main/java/com/back/domain/chatbot/dto/ChatRequestDto.java index d544b4d..83f26e1 100644 --- a/src/main/java/com/back/domain/chatbot/dto/ChatRequestDto.java +++ b/src/main/java/com/back/domain/chatbot/dto/ChatRequestDto.java @@ -23,8 +23,8 @@ public class ChatRequestDto { private boolean isStepRecommendation = false; private Integer currentStep; - // "ALL" 처리를 위해 스텝 3개 String으로 변경 + // "ALL" 처리를 위해 스텝 2개 String으로 변경 private String selectedAlcoholStrength; private String selectedAlcoholBaseType; - private String selectedCocktailType; + // selectedCocktailType 삭제 } \ No newline at end of file diff --git a/src/main/java/com/back/domain/chatbot/enums/MessageType.java b/src/main/java/com/back/domain/chatbot/enums/MessageType.java index 11e71ac..bf21c6c 100644 --- a/src/main/java/com/back/domain/chatbot/enums/MessageType.java +++ b/src/main/java/com/back/domain/chatbot/enums/MessageType.java @@ -5,7 +5,8 @@ public enum MessageType { RADIO_OPTIONS("라디오옵션"), // 라디오 버튼 선택지 CARD_LIST("카드리스트"), // 칵테일 추천 카드 리스트 LOADING("로딩중"), // 로딩 메시지 - ERROR("에러"); // 에러 메시지 + ERROR("에러"), // 에러 메시지 + INPUT("입력"); // 텍스트 입력 요청 private final String description; diff --git a/src/main/java/com/back/domain/chatbot/service/ChatbotService.java b/src/main/java/com/back/domain/chatbot/service/ChatbotService.java index cd4ce25..8da9230 100644 --- a/src/main/java/com/back/domain/chatbot/service/ChatbotService.java +++ b/src/main/java/com/back/domain/chatbot/service/ChatbotService.java @@ -12,7 +12,6 @@ import com.back.domain.cocktail.entity.Cocktail; import com.back.domain.cocktail.enums.AlcoholBaseType; import com.back.domain.cocktail.enums.AlcoholStrength; -import com.back.domain.cocktail.enums.CocktailType; import com.back.domain.cocktail.repository.CocktailRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; @@ -496,19 +495,16 @@ private ChatResponseDto handleStepRecommendation(ChatRequestDto requestDto) { break; case 3: - stepData = getCocktailTypeOptions( - parseAlcoholStrength(requestDto.getSelectedAlcoholStrength()), - parseAlcoholBaseType(requestDto.getSelectedAlcoholBaseType()) - ); - message = "완벽해요! 마지막으로 어떤 스타일로 즐기실 건가요? 🥃"; - type = MessageType.RADIO_OPTIONS; + stepData = null; + message = "좋아요! 이제 원하는 칵테일 스타일을 자유롭게 말씀해주세요 💬\n 없으면 'x', 또는 '없음' 과 같이 입력해주세요!"; + type = MessageType.INPUT; break; case 4: - stepData = getFinalRecommendations( + stepData = getFinalRecommendationsWithMessage( parseAlcoholStrength(requestDto.getSelectedAlcoholStrength()), parseAlcoholBaseType(requestDto.getSelectedAlcoholBaseType()), - parseCocktailType(requestDto.getSelectedCocktailType()) + requestDto.getMessage() ); message = stepData.getStepTitle(); type = MessageType.CARD_LIST; // 최종 추천은 카드 리스트 @@ -585,17 +581,6 @@ private AlcoholBaseType parseAlcoholBaseType(String value) { } } - private CocktailType parseCocktailType(String value) { - if (value == null || value.trim().isEmpty() || "ALL".equalsIgnoreCase(value)) { - return null; - } - try { - return CocktailType.valueOf(value); - } catch (IllegalArgumentException e) { - log.warn("Invalid CocktailType value: {}", value); - return null; - } - } private StepRecommendationResponseDto getAlcoholStrengthOptions() { List options = new ArrayList<>(); @@ -651,47 +636,21 @@ private StepRecommendationResponseDto getAlcoholBaseTypeOptions(AlcoholStrength ); } - private StepRecommendationResponseDto getCocktailTypeOptions(AlcoholStrength alcoholStrength, AlcoholBaseType alcoholBaseType) { - List options = new ArrayList<>(); - - // "전체" 옵션 추가 - options.add(new StepRecommendationResponseDto.StepOption( - "ALL", - "전체", - null - )); - - for (CocktailType cocktailType : CocktailType.values()) { - options.add(new StepRecommendationResponseDto.StepOption( - cocktailType.name(), - cocktailType.getDescription(), - null - )); - } - - return new StepRecommendationResponseDto( - 3, - "어떤 종류의 잔으로 드시겠어요?", - options, - null, - false - ); - } - private StepRecommendationResponseDto getFinalRecommendations( + private StepRecommendationResponseDto getFinalRecommendationsWithMessage( AlcoholStrength alcoholStrength, AlcoholBaseType alcoholBaseType, - CocktailType cocktailType) { + String userMessage) { // 필터링 조건에 맞는 칵테일 검색 // "ALL" 선택 시 해당 필터를 null로 처리하여 전체 검색 List strengths = (alcoholStrength == null) ? null : List.of(alcoholStrength); List baseTypes = (alcoholBaseType == null) ? null : List.of(alcoholBaseType); - List cocktailTypes = (cocktailType == null) ? null : List.of(cocktailType); + // userMessage를 키워드로 사용하여 검색 Page cocktailPage = cocktailRepository.searchWithFilters( - null, // 키워드 없음 + userMessage, // 사용자 입력 메시지를 키워드로 사용 strengths, - cocktailTypes, + null, // cocktailType 사용 안 함 baseTypes, PageRequest.of(0, 3) // 최대 3개 추천 );