diff --git a/src/main/java/kusitms/backend/chatbot/application/ChatbotService.java b/src/main/java/kusitms/backend/chatbot/application/ChatbotService.java index df6d1425..4a85303e 100644 --- a/src/main/java/kusitms/backend/chatbot/application/ChatbotService.java +++ b/src/main/java/kusitms/backend/chatbot/application/ChatbotService.java @@ -52,18 +52,18 @@ private & GuideAnswer> GetGuideChatbotAnswerResponse getAnswe // 2. stadiumName이 일치하는 답변 찾기 for (T answer : matchingAnswers) { if (stadiumName.equals(answer.getStadiumName())) { - return GetGuideChatbotAnswerResponse.of(answer.getAnswers(), answer.getImgUrl()); + return GetGuideChatbotAnswerResponse.of(answer.getAnswer(), answer.getImgUrl(), answer.getLinkName(), answer.getLink()); } } // 3. 일치하는 stadiumName이 없을 경우, 기본 응답 반환 for (T answer : matchingAnswers) { if (answer.getStadiumName() == null) { - return GetGuideChatbotAnswerResponse.of(answer.getAnswers(), answer.getImgUrl()); + return GetGuideChatbotAnswerResponse.of(answer.getAnswer(), answer.getImgUrl(), answer.getLinkName(), answer.getLink()); } } // 4. 기본 응답도 없을 경우 예외 처리 throw new CustomException(ChatbotErrorStatus._NOT_FOUND_GUIDE_CHATBOT_ANSWER); } -} \ No newline at end of file +} diff --git a/src/main/java/kusitms/backend/chatbot/domain/enums/BaseballGuideAnswer.java b/src/main/java/kusitms/backend/chatbot/domain/enums/BaseballGuideAnswer.java index 6749503b..b29e361a 100644 --- a/src/main/java/kusitms/backend/chatbot/domain/enums/BaseballGuideAnswer.java +++ b/src/main/java/kusitms/backend/chatbot/domain/enums/BaseballGuideAnswer.java @@ -8,35 +8,38 @@ public enum BaseballGuideAnswer implements GuideAnswer { Q1(1, null, - new String[]{ - "1. 경기 전 우천 취소\n" + - "• 경기 시작 전 비가 많이 와서 경기장 상태가 불량할 경우, 구단의 경기 운영 책임자가 심판과 협의하여 경기를 취소할 수 있어요.\n" + - "• 보통 경기 시작 3시간 전부터 경기장 상태를 체크하고, 경기 직전에 우천 취소 여부가 결정돼요.", - - "2. 경기 중 우천 취소\n" + - "• 경기 도중 비가 내려 경기를 진행하기 어려울 경우, 심판이 경기 중지를 선언할 수 있어요.\n" + - "• KBO 규정에 따라 경기가 5회 말까지 진행되었을 때(또는 홈팀이 5회 초에 리드 중일 때), 경기 결과는 유효하며, 남은 경기는 치르지 않고 그 시점의 점수로 경기 결과가 확정돼요.\n" + - "• 5회 초나 그 이전에 경기가 중단될 경우, 경기는 노게임으로 처리되고 추후 재경기가 편성돼요.\n" + - "• 노게임이 선언된 경기는 그 시즌 안에 해당 경기가 다시 편성됩니다. 이때 경기는 처음부터 다시 진행돼요.\n", - - "3. 우천에 의한 경기 연기\n" + - "• 비가 내리기 시작하더라도 심판이 경기를 일시 중단하고 기다리다가, 비가 그치거나 그라운드 상태가 회복되면 경기를 재개할 수도 있어요. 이때 경기가 30분 이상 지연될 수 있어요." - }, null), + """ + 1. 경기 전 우천 취소 + • 경기 시작 전 비가 많이 와서 경기장 상태가 불량할 경우, 구단의 경기 운영 책임자가 심판과 협의하여 경기를 취소할 수 있어요. + • 보통 경기 시작 3시간 전부터 경기장 상태를 체크하고, 경기 직전에 우천 취소 여부가 결정돼요. + + 2. 경기 중 우천 취소 + • 경기 도중 비가 내려 경기를 진행하기 어려울 경우, 심판이 경기 중지를 선언할 수 있어요. + • KBO 규정에 따라 경기가 5회 말까지 진행되었을 때(또는 홈팀이 5회 초에 리드 중일 때), 경기 결과는 유효하며, 남은 경기는 치르지 않고 그 시점의 점수로 경기 결과가 확정돼요. + • 5회 초나 그 이전에 경기가 중단될 경우, 경기는 노게임으로 처리되고 추후 재경기가 편성돼요. + • 노게임이 선언된 경기는 그 시즌 안에 해당 경기가 다시 편성됩니다. 이때 경기는 처음부터 다시 진행돼요. + + 3. 우천에 의한 경기 연기 + • 비가 내리기 시작하더라도 심판이 경기를 일시 중단하고 기다리다가, 비가 그치거나 그라운드 상태가 회복되면 경기를 재개할 수도 있어요. 이때 경기가 30분 이상 지연될 수 있어요.""", + null, + null, + null), Q2(2, null, - new String[]{ - "야구 경기의 시간은 평균 3시간입니다.", - - "경기 시작 시간은 평일에는 오후 6시 30분, 주말이나 공휴일에는 상황에 따라 오후 2시와 오후 5시 시작으로 나뉘어져요!", - - "야구에는 쉬는 시간과 같이 느껴지는 ‘클리닝 타임’이 있어요! 5번의 공격과 5번의 수비가 끝난 ‘5회 말’에 짧은 휴식 시간을 갖습니다.", - - "선수들도 몸을 풀고, 경기장도 재정비 시간을 가집니다! 이 시간을 활용하여 먹거리를 사오거나, 화장실을 다녀오는 것을 추천 드려요!" - }, null) + """ + 야구 경기의 시간은 평균 3시간입니다. + 경기 시작 시간은 평일에는 오후 6시 30분, 주말이나 공휴일에는 상황에 따라 오후 2시와 오후 5시 시작으로 나뉘어져요! + 야구에는 쉬는 시간과 같이 느껴지는 ‘클리닝 타임’이 있어요! 5번의 공격과 5번의 수비가 끝난 ‘5회 말’에 짧은 휴식 시간을 갖습니다. + 선수들도 몸을 풀고, 경기장도 재정비 시간을 가집니다! 이 시간을 활용하여 먹거리를 사오거나, 화장실을 다녀오는 것을 추천 드려요!""", + null, + null, + null) ; private final int id; private final String stadiumName; - private final String[] answers; + private final String answer; private final String imgUrl; -} \ No newline at end of file + private final String linkName; + private final String link; +} diff --git a/src/main/java/kusitms/backend/chatbot/domain/enums/FacilityGuideAnswer.java b/src/main/java/kusitms/backend/chatbot/domain/enums/FacilityGuideAnswer.java index 8a0a6a48..07bba168 100644 --- a/src/main/java/kusitms/backend/chatbot/domain/enums/FacilityGuideAnswer.java +++ b/src/main/java/kusitms/backend/chatbot/domain/enums/FacilityGuideAnswer.java @@ -7,144 +7,195 @@ @RequiredArgsConstructor public enum FacilityGuideAnswer implements GuideAnswer { - Q1_LG(1, "lg", - new String[]{ - "• 1루 내야, 3루 내야 (삼겹살쪽 하나, 명인만두쪽 하나)\n" + - "• 가격 1500원 (500원짜리 동전 3개 필요)" - }, null), - - Q1_KT(1, "kt", - new String[]{ - "1. 위치\n" + - "• 1루 물품 보관소 : 1루 메인 게이트 하단, WIZ 게이트 앞에 위치\n" + - "• 3루 물품 보관소 : 3루 메인 게이트 하단, AWAY 게이트 앞에 위치", - - "2. 동선\n" + - "• 1층 1호기 E/V 쪽으로 이동" - }, null), - - Q1_NONE(1, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), - - Q2_LG(2, "lg", - new String[]{ - "1. 1층\n" + - "• GATE1-2 ~3루 내야 출입구 사이 : A03 (잠실원샷) - A04(GS25) 사이\n" + - "• GATE 1-5 ~ 1루 내야 출입구 사이 : A09 (도미노피자)옆", - - "2. 외야\n" + - "• A26, A16 (GS25) 옆", - - "3. 2층\n" + - "• GATE 2-1 앞 : B03 (피자헛) 옆\n" + - "• GATE 2-2 앞 : B14 (원정 구단 상품샵) 옆\n" + - "• GATE 2-3 : B18 (프로스펙스 어쎈틱샵) 옆, B35 (피자헛) 옆", - - "4. 3층\n" + - "• D01(GS25)~D02(스태프 핫도그) 사이\n" + - "• D04 (KFC)~D05(GS25) 사이 (여자화장실만 있어요!)\n" + - "• D06(와팡)~D07(BBQ) 사이\n" + - "• D08(GS25)~D09 (프랭크버거)사이 (여자화장실만 있어요!)\n" + - "• D10(GS25)~D12(GS25) 사이" - }, null), - - Q2_KT(2, "kt", - new String[]{ - "• 출입구 근처, 구역별로 위치, 엘리베이터 옆" - }, null), - - Q2_NONE(2, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), - - Q3_LG(3, "lg", - new String[]{ - "• 1게이트 복도, 중앙복도, 야외 광장에 위치한 쓰레기통\n" + - "• 다회용기는 용기회수박스에 따로 넣어야 돼요! 컵이랑 일반 용기는 구분해서 넣어주세요!" - }, null), - - Q3_KT(3, "kt", - new String[]{ - "• 중앙복도에 위치\n" + - "• 다회용기는 용기회수박스에 따로 넣어야 돼요! 컵이랑 일반 용기는 구분해서 넣어주세요!" - }, null), - - Q3_NONE(3, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), - - Q4_LG(4, "lg", - new String[]{ - "1루 내야와 3루 내야 사이 2층에 위치하고 있어요. 2층은 내야 출입구로 들어서서 한 번 올라가야 해요!" - }, null), - - Q4_KT(4, "kt", - new String[]{ - "1. 위치\n" + - "• 수유실은 중앙 빅또리 센터 맞은편에 위치해 있어요!", - - "2. 동선\n" + - "• 입장 후 2층 복도를 통해 중앙 지정석 쪽으로 이동" - }, null), - - Q4_NONE(4, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), - - Q5_LG(5, "lg", - new String[]{ - "일반 화장실 위치와 동일해요! (49곳)" - }, null), - - Q5_KT(5, "kt", - new String[]{ - "경기장 매층마다 일반화장실 바로 옆에 위치해 있어요!" - }, null), - - Q5_NONE(5, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), - - Q6_LG(6, "lg", - new String[]{ - "2호선 종합운동장역 6번 출구 엘리베이터 > 제1매표소 > 1루 쪽 출구 엘리베이터" - }, null), - - Q6_KT(6, "kt", - new String[]{ - "• 1층 1루 메인 게이트 우측, 3루 메인게이트 좌측, 시즌권 전용게이트 좌측, 위잽전용 스피드게이트 우측\n" + - "• 4층 스카이박스 복도" - }, null), - - Q6_NONE(6, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), - - Q7_LG(7, "lg", - new String[]{ - "‘홈 > 야구 문화’로 확인하실 수 있어요!" - }, null), - - Q7_KT(7, "kt", - new String[]{ - "‘홈 > 야구 문화’로 확인하실 수 있어요!" - }, null), - - Q7_NONE(7, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null) - ; + Q1_LG(1, + "lg", + """ + • 1루 내야, 3루 내야 (삼겹살쪽 하나, 명인만두쪽 하나) + • 가격 1500원 (500원짜리 동전 3개 필요)""", + null, + null, + null), + + Q1_KT(1, + "kt", + """ + 1. 위치 + • 1루 물품 보관소 : 1루 메인 게이트 하단, WIZ 게이트 앞에 위치 + • 3루 물품 보관소 : 3루 메인 게이트 하단, AWAY 게이트 앞에 위치 + + 2. 동선 + • 1층 1호기 E/V 쪽으로 이동""", + null, + null, + null), + + Q1_NONE(1, + null, + "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!", + null, + null, + null), + + Q2_LG(2, + "lg", + """ + 1. 1층 + • GATE1-2 ~3루 내야 출입구 사이 : A03 (잠실원샷) - A04(GS25) 사이 + • GATE 1-5 ~ 1루 내야 출입구 사이 : A09 (도미노피자)옆 + + 2. 외야 + • A26, A16 (GS25) 옆 + + 3. 2층 + • GATE 2-1 앞 : B03 (피자헛) 옆 + • GATE 2-2 앞 : B14 (원정 구단 상품샵) 옆 + • GATE 2-3 : B18 (프로스펙스 어쎈틱샵) 옆, B35 (피자헛) 옆 + + 4. 3층 + • D01(GS25)~D02(스태프 핫도그) 사이 + • D04 (KFC)~D05(GS25) 사이 (여자화장실만 있어요!) + • D06(와팡)~D07(BBQ) 사이 + • D08(GS25)~D09 (프랭크버거)사이 (여자화장실만 있어요!) + • D10(GS25)~D12(GS25) 사이""", + null, + null, + null), + + Q2_KT(2, + "kt", + """ + • 출입구 근처, 구역별로 위치, 엘리베이터 옆""", + null, + null, + null), + + Q2_NONE(2, + null, + "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!", + null, + null, + null), + + Q3_LG(3, + "lg", + """ + • 1게이트 복도, 중앙복도, 야외 광장에 위치한 쓰레기통 + • 다회용기는 용기회수박스에 따로 넣어야 돼요! 컵이랑 일반 용기는 구분해서 넣어주세요!""", + null, + null, + null), + + Q3_KT(3, + "kt", + """ + • 중앙복도에 위치 + • 다회용기는 용기회수박스에 따로 넣어야 돼요! 컵이랑 일반 용기는 구분해서 넣어주세요!""", + null, + null, + null), + + Q3_NONE(3, + null, + "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!", + null, + null, + null), + + Q4_LG(4, + "lg", + "1루 내야와 3루 내야 사이 2층에 위치하고 있어요. 2층은 내야 출입구로 들어서서 한 번 올라가야 해요!", + null, + null, + null), + + Q4_KT(4, + "kt", + """ + 1. 위치 + • 수유실은 중앙 빅또리 센터 맞은편에 위치해 있어요! + + 2. 동선 + • 입장 후 2층 복도를 통해 중앙 지정석 쪽으로 이동""", + null, + null, + null), + + Q4_NONE(4, + null, + "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!", + null, + null, + null), + + Q5_LG(5, + "lg", + "일반 화장실 위치와 동일해요! (49곳)", + null, + null, + null), + + Q5_KT(5, + "kt", + "경기장 매층마다 일반화장실 바로 옆에 위치해 있어요!", + null, + null, + null), + + Q5_NONE(5, + null, + "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!", + null, + null, + null), + + Q6_LG(6, + "lg", + "2호선 종합운동장역 6번 출구 엘리베이터 > 제1매표소 > 1루 쪽 출구 엘리베이터", + null, + null, + null), + + Q6_KT(6, + "kt", + """ + • 1층 1루 메인 게이트 우측, 3루 메인게이트 좌측, 시즌권 전용게이트 좌측, 위잽전용 스피드게이트 우측 + • 4층 스카이박스 복도""", + null, + null, + null), + + Q6_NONE(6, + null, + "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!", + null, + null, + null), + + Q7_LG(7, + "lg", + "‘홈 > 야구 문화’로 확인하실 수 있어요!", + null, + null, + null), + + Q7_KT(7, + "kt", + "‘홈 > 야구 문화’로 확인하실 수 있어요!", + null, + null, + null), + + Q7_NONE(7, + null, + "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!", + null, + null, + null); private final int id; private final String stadiumName; - private final String[] answers; + private final String answer; private final String imgUrl; -} \ No newline at end of file + private final String linkName; + private final String link; +} diff --git a/src/main/java/kusitms/backend/chatbot/domain/enums/GuideAnswer.java b/src/main/java/kusitms/backend/chatbot/domain/enums/GuideAnswer.java index 51f2e2ea..542e0b51 100644 --- a/src/main/java/kusitms/backend/chatbot/domain/enums/GuideAnswer.java +++ b/src/main/java/kusitms/backend/chatbot/domain/enums/GuideAnswer.java @@ -3,6 +3,8 @@ public interface GuideAnswer { int getId(); String getStadiumName(); - String[] getAnswers(); + String getAnswer(); String getImgUrl(); -} \ No newline at end of file + String getLinkName(); + String getLink(); +} diff --git a/src/main/java/kusitms/backend/chatbot/domain/enums/MannerGuideAnswer.java b/src/main/java/kusitms/backend/chatbot/domain/enums/MannerGuideAnswer.java index 6bb7e3f3..64865454 100644 --- a/src/main/java/kusitms/backend/chatbot/domain/enums/MannerGuideAnswer.java +++ b/src/main/java/kusitms/backend/chatbot/domain/enums/MannerGuideAnswer.java @@ -7,26 +7,28 @@ @RequiredArgsConstructor public enum MannerGuideAnswer implements GuideAnswer { - Q1(1, null, - new String[]{ - "🍔 음식물 섭취 후 뒷처리는 이렇게!\n" + - "• 야구장에서 먹은 음식물은, 게이트에서 퇴장할 때 게이트 주변에 마련된 분리수거 규정에 맞춰 재활용해주세요!\n" + - "• 야구장 내에서 먹거리를 구매한 경우, 다회용기에 음식을 받으셨을텐데 다회용기는 별도의 다회용기 수거함에 넣으면 됩니다!", - - "😖 모두가 불편하지 않게 관람해요!\n" + - "• 자유로운 분위기여도 타인이 불편할 행동과 말은 하지 않는 것이 좋아요!\n" + - "• 좌석 마다 특징이 있어요! 예를 들어, ‘응원지정석’의 경우 해당 팀의 팬들이 열정적으로 응원하러 오는 공간이기 때문에, 다른 팀을 응원하는 건 지양해주세요.\n" + - "• 자리를 이탈하거나 돌아올 때는 경기 중간에 이동하는 것이 좋아요! 경기 도중 자리에서 일어나면 뒤쪽 관중들의 시야를 방해할 수 있기 때문이에요!\n" + - "• 야구장에서는 응원 도구(풍선, 클래퍼, 깃발 등)를 사용하는 것이 흔하지만, 크거나 소리가 큰 도구는 주위 사람들을 방해할 수 있으므로 적절하게 사용해야 해요.\n", - - "⚾️ 파울볼을 주의하세요!\n" + - "• 야구장에서는 파울볼이 관중석으로 날아오는 일이 자주 발생해요! 경기 중에는 항상 경기에 집중하고, 파울볼 경고 방송에 귀를 기울여야 해요!\n" + - "• 위험한 상황이 생기면 스태프나 주변 관중이 주의를 환기할 수 있으니 경계를 늦추지 않는 것이 좋습니다." - }, null) + Q1(1, + null, + """ + 🍔 음식물 섭취 후 뒷처리는 이렇게! + • 야구장에서 먹은 음식물은, 게이트에서 퇴장할 때 게이트 주변에 마련된 분리수거 규정에 맞춰 재활용해주세요! + • 야구장 내에서 먹거리를 구매한 경우, 다회용기에 음식을 받으셨을텐데 다회용기는 별도의 다회용기 수거함에 넣으면 됩니다! + + 😖 모두가 불편하지 않게 관람해요! + • 자유로운 분위기여도 타인이 불편할 행동과 말은 하지 않는 것이 좋아요!• 좌석 마다 특징이 있어요! 예를 들어, ‘응원지정석’의 경우 해당 팀의 팬들이 열정적으로 응원하러 오는 공간이기 때문에, 다른 팀을 응원하는 건 지양해주세요.• 자리를 이탈하거나 돌아올 때는 경기 중간에 이동하는 것이 좋아요! 경기 도중 자리에서 일어나면 뒤쪽 관중들의 시야를 방해할 수 있기 때문이에요!• 야구장에서는 응원 도구(풍선, 클래퍼, 깃발 등)를 사용하는 것이 흔하지만, 크거나 소리가 큰 도구는 주위 사람들을 방해할 수 있으므로 적절하게 사용해야 해요. + + ⚾️ 파울볼을 주의하세요! + • 야구장에서는 파울볼이 관중석으로 날아오는 일이 자주 발생해요! 경기 중에는 항상 경기에 집중하고, 파울볼 경고 방송에 귀를 기울여야 해요! + • 위험한 상황이 생기면 스태프나 주변 관중이 주의를 환기할 수 있으니 경계를 늦추지 않는 것이 좋습니다.""", + null, + null, + null) ; private final int id; private final String stadiumName; - private final String[] answers; + private final String answer; private final String imgUrl; -} \ No newline at end of file + private final String linkName; + private final String link; +} diff --git a/src/main/java/kusitms/backend/chatbot/domain/enums/ParkingGuideAnswer.java b/src/main/java/kusitms/backend/chatbot/domain/enums/ParkingGuideAnswer.java index 1eab4fa6..0f915914 100644 --- a/src/main/java/kusitms/backend/chatbot/domain/enums/ParkingGuideAnswer.java +++ b/src/main/java/kusitms/backend/chatbot/domain/enums/ParkingGuideAnswer.java @@ -8,156 +8,177 @@ public enum ParkingGuideAnswer implements GuideAnswer { Q1_LG(1, "lg", - new String[]{ - "가장 가까운 지하철 출구 : 2호선 ‘종합운동장역’의 5번 출구\n" + - "• 5번 출구로 나오면 바로 중앙매표소 발견 가능해요. (매표소는 평일에는 경기 시작 1시간 30분 전, 주말에는 경기 시작 2시간 전에 열어요!)\n" + - "• 무인 매표소는 1루 쪽(중앙매표소 기준 왼쪽)으로 가면 위치해 있어요!\n" + - "• 5번 출구로 나오자마자 왼쪽으로 가면 1루, 오른쪽으로 가면 3루로 들어갈 수 있어요!" - }, "https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/chatbot/go_to_lg.png"), + """ + 가장 가까운 지하철 출구 : 2호선 ‘종합운동장역’의 5번 출구 + • 5번 출구로 나오면 바로 중앙매표소 발견 가능해요. (매표소는 평일에는 경기 시작 1시간 30분 전, 주말에는 경기 시작 2시간 전에 열어요!) + • 무인 매표소는 1루 쪽(중앙매표소 기준 왼쪽)으로 가면 위치해 있어요! + • 5번 출구로 나오자마자 왼쪽으로 가면 1루, 오른쪽으로 가면 3루로 들어갈 수 있어요!""", + "https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/chatbot/go_to_lg.webp", + null, + null), Q1_KT(1, "kt", - new String[]{ - "수원역에서 버스를 통해 KT위즈파크에 도착할 수 있어요!", + """ + 수원역에서 버스를 통해 KT위즈파크에 도착할 수 있어요! - "1. 수원역 1,4번 출구 방향 지하도를 건넘\n" + - "• 다이소, 아트박스 앞 버스 정류장\n" + - "• 버스 777번, 310번 : ‘종합운동장’ 정류장 하차\n" + - "• 버스 5번, 301번 : ‘로얄 팰리스’ 정류장 하차", + 1. 수원역 1,4번 출구 방향 지하도를 건넘 + • 다이소, 아트박스 앞 버스 정류장 + • 버스 777번, 310번 : ‘종합운동장’ 정류장 하차 + • 버스 5번, 301번 : ‘로얄 팰리스’ 정류장 하차 - "2. 수원역 2,4번 출구 방향 지하도를 건넘\n" + - "• 던킨도너츠, 고봉민 김밥 앞 정류장\n" + - "• 버스 2007번, 7770번 : ‘종합운동장’ 정류장 하차" - }, null), + 2. 수원역 2,4번 출구 방향 지하도를 건넘 + • 던킨도너츠, 고봉민 김밥 앞 정류장 + • 버스 2007번, 7770번 : ‘종합운동장’ 정류장 하차""", + null, + null, + null), Q1_NONE(1, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), + """ + 해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!""", + null, + null, + null), Q2_LG(2, "lg", - new String[]{ - "🚨2026.12(예상)까지 주경기장 리모델링 공사로 버스,대형화물차 이용 제한 및 제1, 제4, 제5주차장 이용 불가", + """ + 🚨2026.12(예상)까지 주경기장 리모델링 공사로 버스,대형화물차 이용 제한 및 제1, 제4, 제5주차장 이용 불가 - "입구 바로 오른쪽에 위치한 제2주차장과 잠실새내역 방면 종합운동장사거리 제3주차장을 이용하세요!", - - "잠실종합운동장 부설주차장은 경기 3시간 전부터 주차가 가능해요 (야구 관람시 ‘프로야구’ 경우에 해당)" - }, "https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/chatbot/lg_parking_pee.png"), + 입구 바로 오른쪽에 위치한 제2주차장과 잠실새내역 방면 종합운동장사거리 제3주차장을 이용하세요! + 잠실종합운동장 부설주차장은 경기 3시간 전부터 주차가 가능해요 (야구 관람시 ‘프로야구’ 경우에 해당)""", + "https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/chatbot/lg_parking_pee.webp", + null, + null), Q2_KT(2, "kt", - new String[]{ - "KT위즈파크는 프로야구 경기일에만 주차예약제 시행하고 있어요!", + """ + KT위즈파크는 프로야구 경기일에만 주차예약제 시행하고 있어요! - "1. 예약방법\n" + - "• KT wiz, 수원종합운동장 홈페이지를 통한 예약\n" + - "• 수정 및 취소 가능", + 1. 예약방법 + • KT wiz, 수원종합운동장 홈페이지를 통한 예약 + • 수정 및 취소 가능 - "2. 예약 및 문의\n" + - "• 수원종합운동장 031-240-2720-1", + 2. 예약 및 문의 + • 수원종합운동장 031-240-2720-1 - "3. 예약 기간\n" + - "• 수원 홈경기 프로야구 입장권 예매기간 (KT wiz 홈경기 7일전 14시 00분부터 만차시)", + 3. 예약 기간 + • 수원 홈경기 프로야구 입장권 예매기간 (KT wiz 홈경기 7일전 14시 00분부터 만차시) - "4. 예약 제외 차량\n" + - "• 25인승 소형버스 이상 및 장애인 차량 (입차 시 요금만 납부)", + 4. 예약 제외 차량 + • 25인승 소형버스 이상 및 장애인 차량 (입차 시 요금만 납부) - "5. 사전 예약 요금\n" + - "• 5,000원" - }, null), + 5. 사전 예약 요금 + • 5,000원""", + null, + null, + null), Q2_NONE(2, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), + """ + 해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!""", + null, + null, + null), Q3_LG(3, "lg", - new String[]{ - "1. 탄천공영주차장\n" + - "• 운영시간\n" + - " • 24시간 운영\n" + - "• 요금\n" + - " • 기본요금 : 5분에 100원\n" + - " • 추가요금 : 5분당 100원", - - "2. 아시아공원 공영주차장\n" + - "• 운영시간\n" + - " • 24시간 운영\n" + - "• 요금\n" + - " • 기본요금 : 5분당 250원\n" + - " • 월정기 : 240,000원", - - "3. 봉상시길 노상 공영주차장\n" + - "• 운영시간\n" + - " • 9:00 ~ 21:00\n" + - "• 요금\n" + - " • 기본요금 : 5분당 250원\n" + - " • 출차 전 사전 정산", - }, null), + """ + 1. 탄천공영주차장 + • 운영시간 + • 24시간 운영 + • 요금 + • 기본요금 : 5분에 100원 + • 추가요금 : 5분당 100원 + + 2. 아시아공원 공영주차장 + • 운영시간 + • 24시간 운영 + • 요금 + • 기본요금 : 5분당 250원 + • 월정기 : 240,000원 + + 3. 봉상시길 노상 공영주차장 + • 운영시간 + • 9:00 ~ 21:00 + • 요금 + • 기본요금 : 5분당 250원 + • 출차 전 사전 정산""", + null, + null, + null), Q3_KT(3, "kt", - new String[]{ - "1. 만석공원 공영주차장\n" + - "• 운영시간\n" + - " • 24시간\n" + - "• 요금\n" + - " • 최초 3시간 : 1,000원\n" + - " • 이후 3시간 : 1,000원\n" + - " • 1시간 요금 : 1,000원\n" + - " • 1일 최대 요금 : 5,000원 (야구 티켓 확인 시 1일 주차 3,000원 가능)", - - "2. 장안구청 부설주차장\n" + - "• 운영시간\n" + - " • 평일\n" + - " • 6:00 ~ 24:00\n" + - " • 토요일\n" + - " • 8:00 ~ 24:00\n" + - " • 일요일\n" + - " • 11:00~19:00\n" + - " • 행사/야구경기 등 주차가 필요한 경우 운영시간 조정\n", - "• 요금\n" + - " • 기본요금 : 30분 600원\n" + - " • 추가요금 : 10분당 300원\n" + - " • 1시간 요금 : 1,500원\n" + - " • 1일 최대요금 : 7,000원", - - "3. 홈플러스 북수원점\n" + - "• 운영시간\n" + - " • 10:00 ~ 24:00\n" + - "• 요금\n" + - " • 무료회차 시간 : 30분 이내\n" + - " • 기본요금 : 10분당 1,000원\n" + - " • 1회 최대요금 : 30,000원" - }, null), + """ + 1. 만석공원 공영주차장 + • 운영시간 + • 24시간 + • 요금 + • 최초 3시간 : 1,000원 + • 이후 3시간 : 1,000원 + • 1시간 요금 : 1,000원 + • 1일 최대 요금 : 5,000원 (야구 티켓 확인 시 1일 주차 3,000원 가능) + + 2. 장안구청 부설주차장 + • 운영시간 + • 평일 + • 6:00 ~ 24:00 + • 토요일 + • 8:00 ~ 24:00 + • 일요일 + • 11:00~19:00 + • 행사/야구경기 등 주차가 필요한 경우 운영시간 조정 + • 요금 + • 기본요금 : 30분 600원 + • 추가요금 : 10분당 300원 + • 1시간 요금 : 1,500원 + • 1일 최대요금 : 7,000원 + + 3. 홈플러스 북수원점 + • 운영시간 + • 10:00 ~ 24:00 + • 요금 + • 무료회차 시간 : 30분 이내 + • 기본요금 : 10분당 1,000원 + • 1회 최대요금 : 30,000원""", + null, + null, + null), Q3_NONE(3, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), + """ + 해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!""", + null, + null, + null), Q4_KT(4, "kt", - new String[]{ - "KT위즈파크는 프로야구 경기일에만 주차예약제 시행하고 있어요!\n" + - "• 예약방법\n" + - " • KT wiz, 수원종합운동장 홈페이지를 통한 예약\n" + - " • 수정 및 취소 가능\n" + - "• 예약 및 문의\n" + - " • 수원종합운동장 (031-240-2720-1)\n" + - "• 예약 기간\n" + - " • 수원 홈경기 프로야구 입장권 예매기간 (KT wiz 홈경기 7일전 14시 00분부터 만차시)\n" + - "• 예약 제외 차량\n" + - " • 25인승 소형버스 이상 및 장애인 차량 (입차 시 요금만 납부)\n" + - "• 사전 예약 요금\n" + - " • 5,000원" - }, null), + """ + KT위즈파크는 프로야구 경기일에만 주차예약제 시행하고 있어요! + • 예약방법 + • KT wiz, 수원종합운동장 홈페이지를 통한 예약 + • 수정 및 취소 가능 + • 예약 및 문의 + • 수원종합운동장 (031-240-2720-1) + • 예약 기간 + • 수원 홈경기 프로야구 입장권 예매기간 (KT wiz 홈경기 7일전 14시 00분부터 만차시) + • 예약 제외 차량 + • 25인승 소형버스 이상 및 장애인 차량 (입차 시 요금만 납부) + • 사전 예약 요금 + • 5,000원""", + null, + "주차 예약하러 가기", + "https://suwonparkingbaseball.or.kr/suwonwps/EgovPageLink.do?link=main/menu/prs/ParkingReservationPrivacy"), Q4_NONE(4, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), - - ; + """ + 해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!""", + null, + null, + null); private final int id; private final String stadiumName; - private final String[] answers; + private final String answer; private final String imgUrl; -} \ No newline at end of file + private final String linkName; + private final String link; +} diff --git a/src/main/java/kusitms/backend/chatbot/domain/enums/StadiumGuideAnswer.java b/src/main/java/kusitms/backend/chatbot/domain/enums/StadiumGuideAnswer.java index e19626a8..9b8dbcc9 100644 --- a/src/main/java/kusitms/backend/chatbot/domain/enums/StadiumGuideAnswer.java +++ b/src/main/java/kusitms/backend/chatbot/domain/enums/StadiumGuideAnswer.java @@ -8,98 +8,113 @@ public enum StadiumGuideAnswer implements GuideAnswer { Q1(1, null, - new String[]{ - "야구장 입장 가능 시간은 경기 시작 시간을 기준으로 평일 90분 전, 주말 120분 전입니다.", - - "또한, 경기 시작 이후에도 언제든지 입장이 가능하고 경기가 모두 끝나지 않은 이후라도 언제든지 원하는 시간에 퇴장도 가능해요!" - }, null), + """ + 야구장 입장 가능 시간은 경기 시작 시간을 기준으로 평일 90분 전, 주말 120분 전입니다. + 또한, 경기 시작 이후에도 언제든지 입장이 가능하고 경기가 모두 끝나지 않은 이후라도 언제든지 원하는 시간에 퇴장도 가능해요!""", + null, + null, + null), Q2(2, null, - new String[]{ - "네 가능해요! 야구 관람의 즐거움 중 하나가 음식과 함께 관람할 수 있는 것입니다!'\n'이를 위해 각 경기장마다 다양한 프랜차이즈 음식점과 편의점이 입점해 있어요.", - - "다만, 음식물을 경기장 외부에서 준비한다면 다음을 준수해주셔야 해요.", - - "• 단단한 용기 사용 불가\n• 단단한 과일 반입 불가'\n'• 단단한 과일은 조각내어 반입 가능 (예를 들어, 껍질이 있는 과일은 껍질을 깎아오시는 것만 반입이 가능해요!)'\n'• 비상식적인 용량 반입 불가'\n'• 악취 나는 음식 반입 불가'\n'", - - "이 외의 반입금지 물품이 궁금하다면 하단의 ‘🚫 반입 금지 물품’으로 확인하세요!" - }, null), + """ + 네 가능해요! 야구 관람의 즐거움 중 하나가 음식과 함께 관람할 수 있는 건데요! + 이를 위해 각 경기장마다 다양한 프랜차이즈 음식점과 편의점이 입점해 있어요. + 다만, 음식물을 경기장 외부에서 준비한다면 다음을 준수해주셔야 해요. + • 단단한 용기 사용 불가 + • 단단한 과일 반입 불가 + • 단단한 과일은 조각내어 반입 가능 (예를 들어, 껍질이 있는 과일은 껍질을 깎아오시는 것만 반입이 가능해요!) + • 비상식적인 용량 반입 불가 + • 악취 나는 음식 반입 불가 + 이 외의 반입금지 물품이 궁금하다면, 하단의 ‘🚫 반입 금지 물품’으로 확인하세요!""", + null, + null, + null), Q3_LG(3, "lg", - new String[]{ - "각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요!", - - "잠실 야구장의 경우, 지하철 2호선 '종합운동장역' 6번 출구 앞에 위치한 야구 용품샵 '유니크 스포츠'를 이용할 수 있어요! 홈팀인 엘지 트윈스와 두산 베어스의 굿즈 뿐만 아니라, 원정팀들의 굿즈도 있으니 한 번 방문해보세요!", - - "종합운동장역을 나가기 전, 역사에 위치한 ‘라커디움파크 종합운동장역점’에서도 굿즈를 판매 중이에요!" - }, null), + """ + 각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요! + 잠실 야구장의 경우, 지하철 2호선 '종합운동장역' 6번 출구 앞에 위치한 야구 용품샵 '유니크 스포츠'를 이용할 수 있어요! 홈팀인 엘지 트윈스와 두산 베어스의 굿즈 뿐만 아니라, 원정팀들의 굿즈도 있으니 한 번 방문해보세요! + 종합운동장역을 나가기 전, 역사에 위치한 ‘라커디움파크 종합운동장역점’에서도 굿즈를 판매 중이에요!""", + null, + null, + null), Q3_KT(3, "kt", - new String[]{ - "각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요!", - - "수원 KT 위즈파크의 경우, 1루 중앙게이트(1층 시즌권 전용 게이트) 앞에 위치한 야구 용품샵 '팀 스토어'를 이용할 수 있어요! 원정팀의 굿즈도 준비되어 있으니(수량은 날마다 상이합니다!), 위즈파크에 가신다면, 한 번 방문해보세요!" - }, null), + """ + 각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요! + 수원 KT 위즈파크의 경우, 1루 중앙게이트(1층 시즌권 전용 게이트) 앞에 위치한 야구 용품샵 '팀 스토어'를 이용할 수 있어요! 원정팀의 굿즈도 준비되어 있으니(수량은 날마다 상이합니다!), 위즈파크에 가신다면, 한 번 방문해보세요!""", + null, + null, + null), Q3_NONE(3, null, - new String[]{ - "해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!" - }, null), + """ + 해당 구장에 대한 정보는 준비 중입니다. 빠른 시일 내에 정확한 정보를 준비해 안내드릴게요!""", + null, + null, + null), Q4(4, null, - new String[]{ - "네! 야구장 내부에서는 자유롭게 이동 가능해요.", - - "하지만 좌석 간의 거리가 가까워 이동이 어려운 좌석에서는 공격과 수비가 바뀌는 시간을 이용하면 더 좋아요.", - - "혹시 야구장 외부로의 이동을 원할 경우, 각 경기장 별 재입장 통로를 통해 다녀올 수 있어요!" - }, null), + """ + 네! 야구장 내부에서는 자유롭게 이동 가능해요. + 하지만 좌석 간의 거리가 가까워 이동이 어려운 좌석에서는 공격과 수비가 바뀌는 시간을 이용하면 더 좋아요. + 혹시 야구장 외부로의 이동을 원할 경우, 각 경기장 별 재입장 통로를 통해 다녀올 수 있어요!""", + null, + null, + null), Q5(5, null, - new String[]{ - "네! 자유롭게 촬영이 가능해요.", - - "다만, 야구장 좌석들은 좌석 간 간격이 좁아 카메라 앵글에 많은 사람이 나올 수 있는데, 이를 꺼려하는 사람들이 있을 수 있어요! 이 점을 유의하며 즐겁게 촬영하면 좋습니다!", - - "‘플래시’의 경우, 선수들의 경기 진행에 방해가 될 수 있기 때문에 사용하지 않는 것이 좋아요." - }, null), + """ + 네! 자유롭게 촬영이 가능해요. + 다만, 야구장 좌석들은 좌석 간 간격이 좁아 카메라 앵글에 많은 사람이 나올 수 있는데, 이를 꺼려하는 사람들이 있을 수 있어요! 이 점을 유의하며 즐겁게 촬영하면 좋습니다! + ‘플래시’의 경우, 선수들의 경기 진행에 방해가 될 수 있기 때문에 사용하지 않는 것이 좋아요.""", + null, + null, + null), Q6(6, null, - new String[]{ - "네! 응원은 자유입니다!", - - "다만, 각 구장의 ‘응원지정석’ 성격을 가진 좌석들은 대부분 열정적으로 응원을 하는 분위기이니, 응원에 참여하고 싶지 않다면 다른 좌석을 예매하는 것을 추천해요!" - }, null), + """ + 네! 응원은 자유입니다! + 다만, 각 구장의 ‘응원지정석’ 성격을 가진 좌석들은 대부분 열정적으로 응원을 하는 분위기이니, 응원에 참여하고 싶지 않다면 다른 좌석을 예매하는 것을 추천해요!""", + null, + null, + null), Q7_LG(7, "lg", - new String[]{ - "각 경기장 편의점, 프랜차이즈 음식점에서 자유롭게 판매하고 있습니다.", - - "잠실 야구장의 경우, 관중석을 직접 돌아다니며 시원한 생맥주를 판매하는 맥주보이와 비어걸이 있어요!" - }, null), + """ + 각 경기장 편의점, 프랜차이즈 음식점에서 자유롭게 판매하고 있습니다. + 잠실 야구장의 경우, 관중석을 직접 돌아다니며 시원한 생맥주를 판매하는 맥주보이와 비어걸이 있어요!""", + null, + null, + null), Q7_NONE(7, null, - new String[]{ - "각 경기장 편의점, 프랜차이즈 음식점에서 자유롭게 판매하고 있습니다.", - }, null), + """ + 각 경기장 편의점, 프랜차이즈 음식점에서 자유롭게 판매하고 있습니다.""", + null, + null, + null), Q8(8, null, - new String[]{ - "네! 각 경기장 마다 특색있는 메뉴들을 파는 점도 놓치지 마세요!", - - "‘홈 -> 야구 문화 -> 먹거리’ Tab을 통해 자유롭게 둘러보세요!" - }, null), + """ + 각 경기장 마다 특색있는 메뉴들을 파는 점도 놓치지 마세요! + ‘홈 -> 야구 문화 -> 먹거리’ Tab을 통해 자유롭게 둘러보세요!""", + null, + "먹거리 보러가기", + "/culture"), Q9(9, null, - new String[]{ - "🌞 더운 여름에는 손풍기, 모자, 썬크림, 썬글라스를 준비해가면 좋아요! 특히 오후 2시 경기에는 쾌적한 관람에 큰 도움이 됩니다.", - - "🌙 저녁 경기에는 경기장의 조명으로 인해 벌레가 많이 올 수 있어요. 이를 위해 벌레 퇴치제나 팔토시를 챙겨가도 도움이 돼요." - }, null) - ; + """ + 🌞 더운 여름에는 손풍기, 모자, 썬크림, 썬글라스를 준비해가면 좋아요! 특히 오후 2시 경기에는 쾌적한 관람에 큰 도움이 됩니다. + 🌙 저녁 경기에는 경기장의 조명으로 인해 벌레가 많이 올 수 있어요. 이를 위해 벌레 퇴치제나 팔토시를 챙겨가도 도움이 돼요.""", + null, + null, + null); private final int id; private final String stadiumName; - private final String[] answers; + private final String answer; private final String imgUrl; -} \ No newline at end of file + private final String linkName; + private final String link; +} diff --git a/src/main/java/kusitms/backend/chatbot/dto/response/GetGuideChatbotAnswerResponse.java b/src/main/java/kusitms/backend/chatbot/dto/response/GetGuideChatbotAnswerResponse.java index 7965aafd..3303c732 100644 --- a/src/main/java/kusitms/backend/chatbot/dto/response/GetGuideChatbotAnswerResponse.java +++ b/src/main/java/kusitms/backend/chatbot/dto/response/GetGuideChatbotAnswerResponse.java @@ -1,10 +1,12 @@ package kusitms.backend.chatbot.dto.response; public record GetGuideChatbotAnswerResponse( - String[] answers, - String imgUrl + String answer, + String imgUrl, + String linkName, + String link ) { - public static GetGuideChatbotAnswerResponse of(String[] answers, String imgUrl) { - return new GetGuideChatbotAnswerResponse(answers, imgUrl); + public static GetGuideChatbotAnswerResponse of(String answer, String imgUrl, String linkName, String link) { + return new GetGuideChatbotAnswerResponse(answer, imgUrl, linkName, link); } } diff --git a/src/test/java/kusitms/backend/chatbot/ChatbotControllerTest.java b/src/test/java/kusitms/backend/chatbot/ChatbotControllerTest.java index 7451331e..435b1a00 100644 --- a/src/test/java/kusitms/backend/chatbot/ChatbotControllerTest.java +++ b/src/test/java/kusitms/backend/chatbot/ChatbotControllerTest.java @@ -41,13 +41,14 @@ public class ChatbotControllerTest extends ControllerTestConfig { @DisplayName("가이드 챗봇 답변 조회") public void getGuideChatbotAnswer() throws Exception { // given - GetGuideChatbotAnswerResponse response = new GetGuideChatbotAnswerResponse(new String[]{ - "각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요!", - - "잠실 야구장의 경우, 지하철 2호선 '종합운동장역' 6번 출구 앞에 위치한 야구 용품샵 '유니크 스포츠'를 이용할 수 있어요! 홈팀인 엘지 트윈스와 두산 베어스의 굿즈 뿐만 아니라, 원정팀들의 굿즈도 있으니 한 번 방문해보세요!", - - "종합운동장역을 나가기 전, 역사에 위치한 ‘라커디움파크 종합운동장역점’에서도 굿즈를 판매 중이에요!" - }, null); + GetGuideChatbotAnswerResponse response = new GetGuideChatbotAnswerResponse( + """ + 각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요! + 잠실 야구장의 경우, 지하철 2호선 '종합운동장역' 6번 출구 앞에 위치한 야구 용품샵 '유니크 스포츠'를 이용할 수 있어요! 홈팀인 엘지 트윈스와 두산 베어스의 굿즈 뿐만 아니라, 원정팀들의 굿즈도 있으니 한 번 방문해보세요! + 종합운동장역을 나가기 전, 역사에 위치한 ‘라커디움파크 종합운동장역점’에서도 굿즈를 판매 중이에요!""", + null, + null, + null); Mockito.when(chatbotService.getGuideChatbotAnswer(anyString(), anyString(), anyInt())) .thenReturn(response); @@ -66,8 +67,13 @@ public void getGuideChatbotAnswer() throws Exception { .andExpect(jsonPath("$.isSuccess").value(true)) .andExpect(jsonPath("$.code").value("200")) .andExpect(jsonPath("$.message").value("가이드 챗봇 답변을 가져오는 데 성공했습니다.")) - .andExpect(jsonPath("$.payload.answers[0]").value("각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요!")) + .andExpect(jsonPath("$.payload.answer").value(""" + 각 구장에 위치한 굿즈샵에서 원하는 응원 도구를 구매할 수 있어요! + 잠실 야구장의 경우, 지하철 2호선 '종합운동장역' 6번 출구 앞에 위치한 야구 용품샵 '유니크 스포츠'를 이용할 수 있어요! 홈팀인 엘지 트윈스와 두산 베어스의 굿즈 뿐만 아니라, 원정팀들의 굿즈도 있으니 한 번 방문해보세요! + 종합운동장역을 나가기 전, 역사에 위치한 ‘라커디움파크 종합운동장역점’에서도 굿즈를 판매 중이에요!""")) .andExpect(jsonPath("$.payload.imgUrl").isEmpty()) + .andExpect(jsonPath("$.payload.linkName").isEmpty()) + .andExpect(jsonPath("$.payload.link").isEmpty()) // docs .andDo(MockMvcRestDocumentationWrapper.document("chatbot/guide", @@ -87,8 +93,10 @@ public void getGuideChatbotAnswer() throws Exception { fieldWithPath("code").type(JsonFieldType.STRING).description("응답 코드"), fieldWithPath("message").type(JsonFieldType.STRING).description("응답 메시지"), fieldWithPath("payload").type(JsonFieldType.OBJECT).description("응답 데이터"), - fieldWithPath("payload.answers").type(JsonFieldType.ARRAY).description("답변 목록"), - fieldWithPath("payload.imgUrl").type(JsonFieldType.STRING).description("이미지 URL").optional() + fieldWithPath("payload.answer").type(JsonFieldType.STRING).description("답변"), + fieldWithPath("payload.imgUrl").type(JsonFieldType.STRING).description("이미지 URL").optional(), + fieldWithPath("payload.linkName").type(JsonFieldType.STRING).description("링크 버튼 이름").optional(), + fieldWithPath("payload.link").type(JsonFieldType.STRING).description("링크 URL").optional() ) .responseSchema(Schema.schema("GetGuideChatbotAnswerResponse")) .build() @@ -149,4 +157,4 @@ public void getClovaChatbotAnswer() throws Exception { ) )); } -} \ No newline at end of file +}