From bfdaec17fc89a53f53adfecf88042e92ca6f86ac Mon Sep 17 00:00:00 2001 From: bcsd00026 Date: Mon, 2 Mar 2020 00:26:29 +0900 Subject: [PATCH] refactor chatbot bus feature by applying design patterns && remove unnecessary objects --- .../in/controller/KakaoBotController.java | 60 +-- .../admin/AdminCalendarController.java | 2 +- .../java/koreatech/in/domain/KakaoBot.java | 496 ------------------ .../in/domain/KakaoBot/BusFactory.java | 20 + .../in/domain/KakaoBot/BusForTerm.java | 109 ++++ .../in/domain/KakaoBot/RegularSemester.java | 270 ++++++++++ .../in/domain/KakaoBot/SeasonalSemester.java | 140 +++++ .../in/domain/KakaoBot/Vacation.java | 132 +++++ .../in/service/CalendarServiceImpl.java | 18 +- .../in/service/KakaoBotServiceImpl.java | 25 +- .../{KakaoBotEnum.java => KakaoBot.java} | 62 ++- .../in/skillresponse/SkillResponse.java | 20 +- src/main/webapp/WEB-INF/servlet-context.xml | 6 - 13 files changed, 789 insertions(+), 571 deletions(-) delete mode 100644 src/main/java/koreatech/in/domain/KakaoBot.java create mode 100644 src/main/java/koreatech/in/domain/KakaoBot/BusFactory.java create mode 100644 src/main/java/koreatech/in/domain/KakaoBot/BusForTerm.java create mode 100644 src/main/java/koreatech/in/domain/KakaoBot/RegularSemester.java create mode 100644 src/main/java/koreatech/in/domain/KakaoBot/SeasonalSemester.java create mode 100644 src/main/java/koreatech/in/domain/KakaoBot/Vacation.java rename src/main/java/koreatech/in/skillresponse/{KakaoBotEnum.java => KakaoBot.java} (61%) diff --git a/src/main/java/koreatech/in/controller/KakaoBotController.java b/src/main/java/koreatech/in/controller/KakaoBotController.java index d84637d9..a6f3aa7c 100644 --- a/src/main/java/koreatech/in/controller/KakaoBotController.java +++ b/src/main/java/koreatech/in/controller/KakaoBotController.java @@ -3,7 +3,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonParser; import koreatech.in.service.KakaoBotService; -import koreatech.in.skillresponse.KakaoBotEnum; +import koreatech.in.skillresponse.KakaoBot; import koreatech.in.skillresponse.SkillResponse; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -25,17 +25,17 @@ public class KakaoBotController { @RequestMapping(value = "/dinings", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public @ResponseBody - ResponseEntity requestDinings(@RequestBody String body) { - JsonParser jsonParser = new JsonParser(); - JsonElement jsonElement = jsonParser.parse(body); - - // ['action']['params']['mealtime'] - JsonElement action = jsonElement.getAsJsonObject().get("action"); - JsonElement params = action.getAsJsonObject().get("params"); - String mealtime = params.getAsJsonObject().get("mealtime").getAsString(); - + ResponseEntity requestDinings(@RequestBody String body) { String result; try { + JsonParser jsonParser = new JsonParser(); + JsonElement jsonElement = jsonParser.parse(body); + + // ['action']['params']['mealtime'] + JsonElement action = jsonElement.getAsJsonObject().get("action"); + JsonElement params = action.getAsJsonObject().get("params"); + String mealtime = params.getAsJsonObject().get("mealtime").getAsString(); + result = kakaoBotService.crawlHaksik(mealtime); } catch (Exception e) { SkillResponse errorMsg = new SkillResponse(); @@ -43,41 +43,41 @@ ResponseEntity requestDinings(@RequestBody String body) { result = errorMsg.getSkillPayload().toString(); } - return new ResponseEntity(result, HttpStatus.OK); + return new ResponseEntity<>(result, HttpStatus.OK); } @RequestMapping(value = "/buses/request", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public @ResponseBody - ResponseEntity requestBuses(@RequestBody String body) { + ResponseEntity requestBuses(@RequestBody String body) { SkillResponse busSkill = new SkillResponse(); - busSkill.addQujckReplies("한기대→야우리", KakaoBotEnum.QuickRepliesActionType.MESSAGE.getTypeText(), "한기대→야우리"); - busSkill.addQujckReplies("한기대→천안역", KakaoBotEnum.QuickRepliesActionType.MESSAGE.getTypeText(), "한기대→천안역"); - busSkill.addQujckReplies("야우리→한기대", KakaoBotEnum.QuickRepliesActionType.MESSAGE.getTypeText(), "야우리→한기대"); - busSkill.addQujckReplies("야우리→천안역", KakaoBotEnum.QuickRepliesActionType.MESSAGE.getTypeText(), "야우리→천안역"); - busSkill.addQujckReplies("천안역→한기대", KakaoBotEnum.QuickRepliesActionType.MESSAGE.getTypeText(), "천안역→한기대"); - busSkill.addQujckReplies("천안역→야우리", KakaoBotEnum.QuickRepliesActionType.MESSAGE.getTypeText(), "천안역→야우리"); + busSkill.addQujckReplies("한기대→야우리", KakaoBot.QuickRepliesActionType.MESSAGE.getTypeText(), "한기대→야우리"); + busSkill.addQujckReplies("한기대→천안역", KakaoBot.QuickRepliesActionType.MESSAGE.getTypeText(), "한기대→천안역"); + busSkill.addQujckReplies("야우리→한기대", KakaoBot.QuickRepliesActionType.MESSAGE.getTypeText(), "야우리→한기대"); + busSkill.addQujckReplies("야우리→천안역", KakaoBot.QuickRepliesActionType.MESSAGE.getTypeText(), "야우리→천안역"); + busSkill.addQujckReplies("천안역→한기대", KakaoBot.QuickRepliesActionType.MESSAGE.getTypeText(), "천안역→한기대"); + busSkill.addQujckReplies("천안역→야우리", KakaoBot.QuickRepliesActionType.MESSAGE.getTypeText(), "천안역→야우리"); busSkill.addSimpleText("선택하세요!"); String busSkillStr = busSkill.getSkillPayload().toString(); - return new ResponseEntity(busSkillStr, HttpStatus.OK); + return new ResponseEntity<>(busSkillStr, HttpStatus.OK); } @RequestMapping(value = "/buses", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public @ResponseBody - ResponseEntity returnBuses(@RequestBody String body) { - JsonParser jsonParser = new JsonParser(); - JsonElement jsonElement = jsonParser.parse(body); - - // ['action']['params']['place'], ['action']['params']['place1'] - JsonElement action = jsonElement.getAsJsonObject().get("action"); - JsonElement params = action.getAsJsonObject().get("params"); - String depart = params.getAsJsonObject().get("place").getAsString(); - String arrival = params.getAsJsonObject().get("place1").getAsString(); - + ResponseEntity returnBuses(@RequestBody String body) { String result; try { + JsonParser jsonParser = new JsonParser(); + JsonElement jsonElement = jsonParser.parse(body); + + // ['action']['params']['place'], ['action']['params']['place1'] + JsonElement action = jsonElement.getAsJsonObject().get("action"); + JsonElement params = action.getAsJsonObject().get("params"); + String depart = params.getAsJsonObject().get("place").getAsString(); + String arrival = params.getAsJsonObject().get("place1").getAsString(); + result = kakaoBotService.calculateBus(depart, arrival); } catch (Exception e) { SkillResponse errorMsg = new SkillResponse(); @@ -85,6 +85,6 @@ ResponseEntity returnBuses(@RequestBody String body) { result = errorMsg.getSkillPayload().toString(); } - return new ResponseEntity(result, HttpStatus.OK); + return new ResponseEntity<>(result, HttpStatus.OK); } } diff --git a/src/main/java/koreatech/in/controller/admin/AdminCalendarController.java b/src/main/java/koreatech/in/controller/admin/AdminCalendarController.java index 61095af2..0b7fd633 100644 --- a/src/main/java/koreatech/in/controller/admin/AdminCalendarController.java +++ b/src/main/java/koreatech/in/controller/admin/AdminCalendarController.java @@ -24,7 +24,7 @@ public class AdminCalendarController { @ApiOperation(value = "", authorizations = {@Authorization(value="Authorization")}) @RequestMapping(value = "/admin/term", method = RequestMethod.POST) public @ResponseBody - ResponseEntity createTerm(@ApiParam(required = true, value = "10: 1학기 정규, 11: 1학기 계절, 20: 2학기 정규, 21: 2학기 계절") @RequestBody String term) { + ResponseEntity createTerm(@ApiParam(required = true, value = "10: 1학기 정규, 11: 1학기 계절, 12: 1학기 계절 이후, 20: 2학기 정규, 21: 2학기 계절, 22: 2학기 계절 이후") @RequestBody String term) { return new ResponseEntity<>(calendarService.createTermForAdmin(term), HttpStatus.CREATED); } diff --git a/src/main/java/koreatech/in/domain/KakaoBot.java b/src/main/java/koreatech/in/domain/KakaoBot.java deleted file mode 100644 index 8e456381..00000000 --- a/src/main/java/koreatech/in/domain/KakaoBot.java +++ /dev/null @@ -1,496 +0,0 @@ -package koreatech.in.domain; - -import koreatech.in.skillresponse.KakaoBotEnum; -import org.springframework.data.redis.core.ValueOperations; - -import javax.annotation.Resource; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.*; - -public class KakaoBot { - private static final Map changeWord = new HashMap() {{ - put("아침", "BREAKFAST"); - put("점심", "LUNCH"); - put("저녁", "DINNER"); - put("한기대", "koreatech"); - put("야우리", "terminal"); - put("천안역", "station"); - }}; - - private static final String[] restaurantList = {"한식", "일품식", "특식", "양식", "능수관"}; //, "수박여", "2캠퍼스" - - // 통학중 셔틀 정보 : https://www.koreatech.ac.kr/kor/CMS/Contents/Contents.do?mCode=MN317 - // 방학중 셔틀 정보 : https://www.koreatech.ac.kr/kor/CMS/Contents/Contents.do?mCode=MN318 - // 2019년 겨울 방학 셔틀 : https://www.koreatech.ac.kr/kor/CMS/NoticeMgr/view.do?mCode=MN230&post_seq=25166&board_id=14 - private static final String[] expressFromKoreatechToTerminal = { - "08:35", - "09:35", - "10:35", - "11:30", - "12:35", - "13:35", - "14:35", - "15:30", - "16:35", - "17:35", - "18:35", - "19:35", - "20:30", - "22:05" - }; - - private static final String[] expressFromTerminalToKoreatech = { - "07:00", - "08:00", - "09:00", - "10:00", - "11:00", - "12:00", - "13:00", - "14:00", - "15:00", - "16:00", - "17:00", - "18:00", - "19:00", - "20:30", - }; - private static final String[][] shuttleFromKoreatech = { - { // 월요일 - "14:00", - "18:10", - }, - { // 화요일 - "14:00", - "18:10", - }, - { // 수요일 - "14:00", - "18:10", - }, - { // 목요일 - "14:00", - "18:10", - }, - { // 금요일 - "14:00", - "18:10", - }, - { // 토요일 - }, - { // 일요일 - } - }; - // private static final String[][] shuttleFromKoreatech = { -// { // 월요일 -// "09:10", -// "11:00", -// "14:00", -// "15:00", -// "16:00", -// "16:30", -// "17:00", -// "19:30", -// "21:00", -// "22:40" -// }, -// { // 화요일 -// "09:10", -// "11:00", -// "14:00", -// "15:00", -// "16:00", -// "16:30", -// "17:00", -// "19:30", -// "21:00", -// "22:40" -// }, -// { // 수요일 -// "09:10", -// "11:00", -// "14:00", -// "15:00", -// "16:00", -// "16:30", -// "17:00", -// "19:30", -// "21:00", -// "22:40" -// }, -// { // 목요일 -// "09:10", -// "11:00", -// "14:00", -// "15:00", -// "16:00", -// "16:30", -// "17:00", -// "19:30", -// "21:00", -// "22:40" -// }, -// { // 금요일 -// "09:10", -// "11:00", -// "14:00", -// "14:30", -// "15:00", -// "16:00", -// "16:30", -// "17:00", -// "19:30", -// "21:00", -// "22:40" -// }, -// { // 토요일 -// "14:00" -// }, -// { // 일요일 -// "17:00" -// } -// }; - //방학기간 - private static final String[][] shuttleFromTerminal = { - { // 월요일 - "08:00", - "14:25" - }, - { // 화요일 - "08:00", - "14:25" - }, - { // 수요일 - "08:00", - "14:25" - }, - { // 목요일 - "08:00", - "14:25" - }, - { // 금요일 - "08:00", - "14:25" - }, - { // 토요일 - - }, - { // 일요일 - - } - }; - //통학기간 -// private static final String[][] shuttleFromTerminal = { -// { // 월요일 -// "08:00", -// "10:10", -// "11:25", -// "14:25", -// "16:05", -// "16:25", -// "16:55", -// "17:25", -// "18:45", -// "19:55", -// "22:00" -// }, -// { // 화요일 -// "08:00", -// "10:10", -// "11:25", -// "14:25", -// "16:05", -// "16:25", -// "16:55", -// "17:25", -// "18:45", -// "19:55", -// "22:00" -// }, -// { // 수요일 -// "08:00", -// "10:10", -// "11:25", -// "14:25", -// "16:05", -// "16:25", -// "16:55", -// "17:25", -// "18:45", -// "19:55", -// "22:00" -// }, -// { // 목요일 -// "08:00", -// "10:10", -// "11:25", -// "14:25", -// "16:05", -// "16:25", -// "16:55", -// "17:25", -// "18:45", -// "19:55", -// "22:00" -// }, -// { // 금요일 -// "08:00", -// "10:10", -// "11:25", -// "14:25", -// "16:05", -// "16:25", -// "16:55", -// "17:25", -// "18:45", -// "19:55", -// "22:00" -// }, -// { // 토요일 -// "14:25", -// "18:45" -// }, -// { // 일요일 -// "17:30", -// "21:15", -// "21:30" -// } -// }; - - - - - //방학기간 - private static final String[][] shuttleFromStationToKoreatech = { - { // 월요일 - "08:05", - "14:30" - }, - { // 화요일 - "08:05", - "14:30" - }, - { // 수요일 - "08:05", - "14:30" - }, - { // 목요일 - "08:05", - "14:30" - }, - { // 금요일 - "08:05", - "14:30" - }, - { // 토요일 - }, - { // 일요일 - } - }; -//통학기간 -// private static final String[][] shuttleFromStationToKoreatech = { -// { // 월요일 -// "08:05", -// "10:15", -// "11:30", -// "14:30", -// "16:10", -// "16:30", -// "17:00", -// "17:30", -// "18:50", -// "20:00", -// "22:05" -// }, -// { // 화요일 -// "08:05", -// "10:15", -// "11:30", -// "14:30", -// "16:10", -// "16:30", -// "17:00", -// "17:30", -// "18:50", -// "20:00", -// "22:05" -// }, -// { // 수요일 -// "08:05", -// "10:15", -// "11:30", -// "14:30", -// "16:10", -// "16:30", -// "17:00", -// "17:30", -// "18:50", -// "20:00", -// "22:05" -// }, -// { // 목요일 -// "08:05", -// "10:15", -// "11:30", -// "14:30", -// "16:10", -// "16:30", -// "17:00", -// "17:30", -// "18:50", -// "20:00", -// "22:05" -// }, -// { // 금요일 -// "08:05", -// "10:15", -// "11:30", -// "14:30", -// "16:10", -// "16:30", -// "17:00", -// "17:30", -// "18:50", -// "20:00", -// "22:05" -// }, -// { // 토요일 -// "14:30", -// "18:50" -// }, -// { // 일요일 -// "17:35", -// "21:20", -// "21:35" -// } -// }; - - - private static final String[][] shuttleFromStationToTerminal = { - { // 월요일 - }, - { // 화요일 - }, - { // 수요일 - }, - { // 목요일 - }, - { // 금요일 - }, - { // 토요일 - }, - { // 일요일 - } - }; -// 통학기간 -// private static final String[][] shuttleFromStationToTerminal = { -// { // 월요일 -// "09:30", -// "15:20" -// }, -// { // 화요일 -// "09:30", -// "15:20" -// }, -// { // 수요일 -// "09:30", -// "15:20" -// }, -// { // 목요일 -// "09:30", -// "15:20" -// }, -// { // 금요일 -// "09:30", -// "15:20" -// }, -// { // 토요일 -// }, -// { // 일요일 -// } -// }; - - private static final Map shuttleTimeTables = new HashMap() {{ - put("koreatech", shuttleFromKoreatech); - put("terminal", shuttleFromTerminal); - }}; - - private static int appendTime(String[] timetable, int startIndex, int busCode, StringBuilder result) throws ParseException { - String busName = KakaoBotEnum.BusType.values()[busCode].getTypeText(); // 학교셔틀 / 대성고속 / 시내버스 - - TimeZone timeZone = TimeZone.getTimeZone("Asia/Seoul"); - Calendar currentTime = Calendar.getInstance(timeZone); // 오늘 일자의 Calendar 객체 - - Calendar currentBusTime = Calendar.getInstance(timeZone); // 현재 버스 시간의 Calendar 객체 - - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); // 시간표 포맷 - simpleDateFormat.setTimeZone(timeZone); - - if(timetable.length == 0) { // 오늘의 운행 시간표가 없다면 ? - result.append(String.format("%s 미운행\n", busName)); - return -1; - } - - for (int i = startIndex; i < timetable.length; i++) { - currentBusTime.setTime(simpleDateFormat.parse(timetable[i])); - currentBusTime.set(currentTime.get(Calendar.YEAR), currentTime.get(Calendar.MONTH), currentTime.get(Calendar.DAY_OF_MONTH)); - // 오늘 일자로 시간 설정 - long timeDifference = currentBusTime.getTimeInMillis() - currentTime.getTimeInMillis(); - - if (timeDifference > 0) { // 오늘 남은 버스가 존재한다면 ? - int second = (int) (timeDifference / 1000) % 60; - int minute = (int) ((timeDifference / (1000 * 60)) % 60); - int hour = (int) ((timeDifference / (1000 * 60 * 60)) % 24); - result.append(String.format("%s, %d시간 %d분 %d초 남음\n", busName, hour, minute, second)); - return i; - } - } - result.append(String.format("%s 운행정보없음\n", busName)); - return -1; - } - - public static void searchShuttleTime(String departEng, String arrivalEng, StringBuilder resultNow, StringBuilder resultNext) throws ParseException { - TimeZone timeZone = TimeZone.getTimeZone("Asia/Seoul"); - Calendar currentTime = Calendar.getInstance(timeZone); // 오늘 일자의 Calendar 객체 - - String[] shuttleTimeTable; - int dayType = (currentTime.get(Calendar.DAY_OF_WEEK) + 5) % 7; - - if (!departEng.equals("station")) { // 출발지가 천안역이 아니라면 ? - String[][] timeTable = (String[][]) shuttleTimeTables.get(departEng); // 출발지로 시간표 가져옴 - shuttleTimeTable = timeTable[dayType]; - } // 천안역이라면 ? - else - shuttleTimeTable = arrivalEng.equals("koreatech") ? shuttleFromStationToKoreatech[dayType] : shuttleFromStationToTerminal[dayType]; - // 도착지에 따라 다른 시간표 가져옴 - - int resultIndex = appendTime(shuttleTimeTable, 0, KakaoBotEnum.BusType.SHUTTLE.ordinal(), resultNow); - resultIndex = appendTime(shuttleTimeTable, resultIndex + 1, KakaoBotEnum.BusType.SHUTTLE.ordinal(), resultNext); - } - - public static void searchExpressTime(String departEnglish, String arrivalEnglish, StringBuilder resultNow, StringBuilder resultNext) throws ParseException { - String[] expressTimeTable; - - if (departEnglish.equals("koreatech") && arrivalEnglish.equals("terminal")) { // 학교에서 야우리 - expressTimeTable = expressFromKoreatechToTerminal; - } else if (departEnglish.equals("terminal") && arrivalEnglish.equals("koreatech")) { // 야우리에서 학교 - expressTimeTable = expressFromTerminalToKoreatech; - } else { // 그 외에는 운행하지 않으므로 - resultNow.append("대성고속 미운행\n"); - resultNext.append("대성고속 미운행\n"); - return; - } - - int resultIndex = appendTime(expressTimeTable, 0, KakaoBotEnum.BusType.EXPRESS.ordinal(), resultNow); - resultIndex = appendTime(expressTimeTable, resultIndex + 1, KakaoBotEnum.BusType.EXPRESS.ordinal(), resultNext); - } - - public static String[] getRestaurantList() { - return restaurantList; - } - - public static String getChangedWord(String beforeWord) { - return changeWord.get(beforeWord); - } -} diff --git a/src/main/java/koreatech/in/domain/KakaoBot/BusFactory.java b/src/main/java/koreatech/in/domain/KakaoBot/BusFactory.java new file mode 100644 index 00000000..ae6b7cf9 --- /dev/null +++ b/src/main/java/koreatech/in/domain/KakaoBot/BusFactory.java @@ -0,0 +1,20 @@ +package koreatech.in.domain.KakaoBot; + +public class BusFactory { + public static BusForTerm createBus(String termCode) { + int termInt = Integer.parseInt(termCode); + BusForTerm bus; + switch (termInt % 10) { + case 0: default: + bus = new RegularSemester(); + break; + case 1: + bus = new SeasonalSemester(); + break; + case 2: + bus = new Vacation(); + break; + } + return bus; + } +} diff --git a/src/main/java/koreatech/in/domain/KakaoBot/BusForTerm.java b/src/main/java/koreatech/in/domain/KakaoBot/BusForTerm.java new file mode 100644 index 00000000..7a922a60 --- /dev/null +++ b/src/main/java/koreatech/in/domain/KakaoBot/BusForTerm.java @@ -0,0 +1,109 @@ +package koreatech.in.domain.KakaoBot; + +import koreatech.in.skillresponse.KakaoBot; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone; + +public abstract class BusForTerm { + // 통학중 셔틀 정보 : https://www.koreatech.ac.kr/kor/CMS/Contents/Contents.do?mCode=MN317 + // 방학중 셔틀 정보 : https://www.koreatech.ac.kr/kor/CMS/Contents/Contents.do?mCode=MN318 + // 2019년 겨울 방학 셔틀 : https://www.koreatech.ac.kr/kor/CMS/NoticeMgr/view.do?mCode=MN230&post_seq=25166&board_id=14 + + protected String[] expressFromKoreatechToTerminal = { + "08:35", + "09:35", + "10:35", + "11:30", + "12:35", + "13:35", + "14:35", + "15:30", + "16:35", + "17:35", + "18:35", + "19:35", + "20:30", + "22:05" + }; + + protected String[] expressFromTerminalToKoreatech = { + "07:00", + "08:00", + "09:00", + "10:00", + "11:00", + "12:00", + "13:00", + "14:00", + "15:00", + "16:00", + "17:00", + "18:00", + "19:00", + "20:30", + }; + + public int appendTime(String[] timetable, int startIndex, int busCode, StringBuilder result) throws ParseException { + String busName = KakaoBot.BusType.values()[busCode].getTypeText(); // 학교셔틀 / 대성고속 / 시내버스 + + TimeZone timeZone = TimeZone.getTimeZone("Asia/Seoul"); + Calendar currentTime = Calendar.getInstance(timeZone); // 오늘 일자의 Calendar 객체 + + Calendar currentBusTime = Calendar.getInstance(timeZone); // 현재 버스 시간의 Calendar 객체 + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); // 시간표 포맷 + simpleDateFormat.setTimeZone(timeZone); + + if(timetable.length == 0) { // 오늘의 운행 시간표가 없다면 ? + result.append(String.format("%s 미운행\n", busName)); + return -1; + } + + for (int i = startIndex; i < timetable.length; i++) { + currentBusTime.setTime(simpleDateFormat.parse(timetable[i])); + currentBusTime.set(currentTime.get(Calendar.YEAR), currentTime.get(Calendar.MONTH), currentTime.get(Calendar.DAY_OF_MONTH)); + // 오늘 일자로 시간 설정 + long timeDifference = currentBusTime.getTimeInMillis() - currentTime.getTimeInMillis(); + + if (timeDifference > 0) { // 오늘 남은 버스가 존재한다면 ? + int second = (int) (timeDifference / 1000) % 60; + int minute = (int) ((timeDifference / (1000 * 60)) % 60); + int hour = (int) ((timeDifference / (1000 * 60 * 60)) % 24); + result.append(String.format("%s, %d시간 %d분 %d초 남음\n", busName, hour, minute, second)); + return i; + } + } + result.append(String.format("%s 운행정보없음\n", busName)); + return -1; + } + + public void searchShuttleTime(String departEng, String arrivalEng, StringBuilder resultNow, StringBuilder resultNext) throws ParseException { + String[] shuttleTimeTable = getShuttleTimetable(departEng, arrivalEng); + + int resultIndex = appendTime(shuttleTimeTable, 0, KakaoBot.BusType.SHUTTLE.ordinal(), resultNow); + resultIndex = appendTime(shuttleTimeTable, resultIndex + 1, KakaoBot.BusType.SHUTTLE.ordinal(), resultNext); + } + + public void searchExpressTime(String departEng, String arrivalEng, StringBuilder resultNow, StringBuilder resultNext) throws ParseException { + String[] expressTimeTable; + + if (departEng.equalsIgnoreCase("koreatech") && arrivalEng.equalsIgnoreCase("terminal")) { // 학교에서 야우리 + expressTimeTable = expressFromKoreatechToTerminal; + } else if (departEng.equalsIgnoreCase("terminal") && arrivalEng.equalsIgnoreCase("koreatech")) { // 야우리에서 학교 + expressTimeTable = expressFromTerminalToKoreatech; + } else { // 그 외에는 운행하지 않으므로 + resultNow.append("대성고속 미운행\n"); + resultNext.append("대성고속 미운행\n"); + return; + } + + int resultIndex = appendTime(expressTimeTable, 0, KakaoBot.BusType.EXPRESS.ordinal(), resultNow); + resultIndex = appendTime(expressTimeTable, resultIndex + 1, KakaoBot.BusType.EXPRESS.ordinal(), resultNext); + } + + // Hook Method + protected abstract String[] getShuttleTimetable(String departEng, String arrivalEng); +} diff --git a/src/main/java/koreatech/in/domain/KakaoBot/RegularSemester.java b/src/main/java/koreatech/in/domain/KakaoBot/RegularSemester.java new file mode 100644 index 00000000..24e7cb9d --- /dev/null +++ b/src/main/java/koreatech/in/domain/KakaoBot/RegularSemester.java @@ -0,0 +1,270 @@ +package koreatech.in.domain.KakaoBot; + +import java.util.Calendar; +import java.util.TimeZone; + +public class RegularSemester extends BusForTerm { + private static final String[][] shuttleFromKoreatech = { + { // 월요일 + "09:10", + "11:00", + "14:00", + "15:00", + "16:00", + "16:30", + "17:00", + "19:30", + "21:00", + "22:40" + }, + { // 화요일 + "09:10", + "11:00", + "14:00", + "15:00", + "16:00", + "16:30", + "17:00", + "19:30", + "21:00", + "22:40" + }, + { // 수요일 + "09:10", + "11:00", + "14:00", + "15:00", + "16:00", + "16:30", + "17:00", + "19:30", + "21:00", + "22:40" + }, + { // 목요일 + "09:10", + "11:00", + "14:00", + "15:00", + "16:00", + "16:30", + "17:00", + "19:30", + "21:00", + "22:40" + }, + { // 금요일 + "09:10", + "11:00", + "14:00", + "14:30", + "15:00", + "16:00", + "16:30", + "17:00", + "19:30", + "21:00", + "22:40" + }, + { // 토요일 + "14:00" + }, + { // 일요일 + "17:00" + } + }; + + private static final String[][] shuttleFromTerminal = { + { // 월요일 + "08:00", + "10:10", + "11:25", + "14:25", + "16:05", + "16:25", + "16:55", + "17:25", + "18:45", + "19:55", + "22:00" + }, + { // 화요일 + "08:00", + "10:10", + "11:25", + "14:25", + "16:05", + "16:25", + "16:55", + "17:25", + "18:45", + "19:55", + "22:00" + }, + { // 수요일 + "08:00", + "10:10", + "11:25", + "14:25", + "16:05", + "16:25", + "16:55", + "17:25", + "18:45", + "19:55", + "22:00" + }, + { // 목요일 + "08:00", + "10:10", + "11:25", + "14:25", + "16:05", + "16:25", + "16:55", + "17:25", + "18:45", + "19:55", + "22:00" + }, + { // 금요일 + "08:00", + "10:10", + "11:25", + "14:25", + "16:05", + "16:25", + "16:55", + "17:25", + "18:45", + "19:55", + "22:00" + }, + { // 토요일 + "14:25", + "18:45" + }, + { // 일요일 + "17:30", + "21:15", + "21:30" + } + }; + + private static final String[][] shuttleFromStationToKoreatech = { + { // 월요일 + "08:05", + "10:15", + "11:30", + "14:30", + "16:10", + "16:30", + "17:00", + "17:30", + "18:50", + "20:00", + "22:05" + }, + { // 화요일 + "08:05", + "10:15", + "11:30", + "14:30", + "16:10", + "16:30", + "17:00", + "17:30", + "18:50", + "20:00", + "22:05" + }, + { // 수요일 + "08:05", + "10:15", + "11:30", + "14:30", + "16:10", + "16:30", + "17:00", + "17:30", + "18:50", + "20:00", + "22:05" + }, + { // 목요일 + "08:05", + "10:15", + "11:30", + "14:30", + "16:10", + "16:30", + "17:00", + "17:30", + "18:50", + "20:00", + "22:05" + }, + { // 금요일 + "08:05", + "10:15", + "11:30", + "14:30", + "16:10", + "16:30", + "17:00", + "17:30", + "18:50", + "20:00", + "22:05" + }, + { // 토요일 + "14:30", + "18:50" + }, + { // 일요일 + "17:35", + "21:20", + "21:35" + } + }; + + private static final String[][] shuttleFromStationToTerminal = { + { // 월요일 + "09:30", + "15:20" + }, + { // 화요일 + "09:30", + "15:20" + }, + { // 수요일 + "09:30", + "15:20" + }, + { // 목요일 + "09:30", + "15:20" + }, + { // 금요일 + "09:30", + "15:20" + }, + { // 토요일 + }, + { // 일요일 + } + }; + + @Override + protected String[] getShuttleTimetable(String departEng, String arrivalEng) { + TimeZone timeZone = TimeZone.getTimeZone("Asia/Seoul"); + Calendar currentTime = Calendar.getInstance(timeZone); // 오늘 일자의 Calendar 객체 + int dayType = (currentTime.get(Calendar.DAY_OF_WEEK) + 5) % 7; + + if (!departEng.equalsIgnoreCase("station")) { // 출발지가 천안역이 아니라면? + return departEng.equalsIgnoreCase("koreatech") ? shuttleFromKoreatech[dayType] : shuttleFromTerminal[dayType]; + } else { // 천안역이라면? + return arrivalEng.equalsIgnoreCase("koreatech") ? shuttleFromStationToKoreatech[dayType] : shuttleFromStationToTerminal[dayType]; + } + } +} diff --git a/src/main/java/koreatech/in/domain/KakaoBot/SeasonalSemester.java b/src/main/java/koreatech/in/domain/KakaoBot/SeasonalSemester.java new file mode 100644 index 00000000..9aef20e1 --- /dev/null +++ b/src/main/java/koreatech/in/domain/KakaoBot/SeasonalSemester.java @@ -0,0 +1,140 @@ +package koreatech.in.domain.KakaoBot; + +import java.util.Calendar; +import java.util.TimeZone; + +public class SeasonalSemester extends BusForTerm { + private static final String[][] shuttleFromKoreatech = { + { // 월요일 + "14:00", + }, + { // 화요일 + "14:00", + }, + { // 수요일 + "14:00", + }, + { // 목요일 + "14:00", + }, + { // 금요일 + "14:00", + }, + { // 토요일 + }, + { // 일요일 + } + }; + + private static final String[][] shuttleFromTerminalToKoreatech = { + { // 월요일 + "08:00", + "14:25" + }, + { // 화요일 + "08:00", + "14:25" + }, + { // 수요일 + "08:00", + "14:25" + }, + { // 목요일 + "08:00", + "14:25" + }, + { // 금요일 + "08:00", + "14:25" + }, + { // 토요일 + + }, + { // 일요일 + + } + }; + + private static final String[][] shuttleFromTerminalToStation = { + { // 월요일 + "14:25", + }, + { // 화요일 + "14:25", + }, + { // 수요일 + "14:25", + }, + { // 목요일 + "14:25", + }, + { // 금요일 + "14:25", + }, + { // 토요일 + + }, + { // 일요일 + + } + }; + + private static final String[][] shuttleFromStationToKoreatech = { + { // 월요일 + "08:05", + "14:30" + }, + { // 화요일 + "08:05", + "14:30" + }, + { // 수요일 + "08:05", + "14:30" + }, + { // 목요일 + "08:05", + "14:30" + }, + { // 금요일 + "08:05", + "14:30" + }, + { // 토요일 + }, + { // 일요일 + } + }; + + private static final String[][] shuttleFromStationToTerminal = { + { // 월요일 + }, + { // 화요일 + }, + { // 수요일 + }, + { // 목요일 + }, + { // 금요일 + }, + { // 토요일 + }, + { // 일요일 + } + }; + + @Override + protected String[] getShuttleTimetable(String departEng, String arrivalEng) { + TimeZone timeZone = TimeZone.getTimeZone("Asia/Seoul"); + Calendar currentTime = Calendar.getInstance(timeZone); // 오늘 일자의 Calendar 객체 + int dayType = (currentTime.get(Calendar.DAY_OF_WEEK) + 5) % 7; + + if (departEng.equalsIgnoreCase("koreatech")) { // 출발지가 학교라면 + return shuttleFromKoreatech[dayType]; + } else if (departEng.equalsIgnoreCase("station")) { // 천안역이라면? + return arrivalEng.equalsIgnoreCase("koreatech") ? shuttleFromStationToKoreatech[dayType] : shuttleFromStationToTerminal[dayType]; + } else { // 터미널이라면? + return arrivalEng.equalsIgnoreCase("koreatech") ? shuttleFromTerminalToKoreatech[dayType] : shuttleFromTerminalToStation[dayType]; + } + } +} diff --git a/src/main/java/koreatech/in/domain/KakaoBot/Vacation.java b/src/main/java/koreatech/in/domain/KakaoBot/Vacation.java new file mode 100644 index 00000000..7ca66b66 --- /dev/null +++ b/src/main/java/koreatech/in/domain/KakaoBot/Vacation.java @@ -0,0 +1,132 @@ +package koreatech.in.domain.KakaoBot; + +import java.util.Calendar; +import java.util.TimeZone; + +public class Vacation extends BusForTerm { + private static final String[][] shuttleFromKoreatech = { + { // 월요일 + "14:00", + }, + { // 화요일 + "14:00", + }, + { // 수요일 + "14:00", + }, + { // 목요일 + "14:00", + }, + { // 금요일 + "14:00", + }, + { // 토요일 + }, + { // 일요일 + } + }; + + private static final String[][] shuttleFromTerminal = { + { // 월요일 + "08:00", + "14:25" + }, + { // 화요일 + "08:00", + "14:25" + }, + { // 수요일 + "08:00", + "14:25" + }, + { // 목요일 + "08:00", + "14:25" + }, + { // 금요일 + "08:00", + "14:25" + }, + { // 토요일 + + }, + { // 일요일 + + } + }; + + private static final String[][] shuttleFromStationToKoreatech = { + { // 월요일 + "08:05", + "14:30" + }, + { // 화요일 + "08:05", + "14:30" + }, + { // 수요일 + "08:05", + "14:30" + }, + { // 목요일 + "08:05", + "14:30" + }, + { // 금요일 + "08:05", + "14:30" + }, + { // 토요일 + }, + { // 일요일 + } + }; + + private static final String[][] shuttleFromStationToTerminal = { + { // 월요일 + }, + { // 화요일 + }, + { // 수요일 + }, + { // 목요일 + }, + { // 금요일 + }, + { // 토요일 + }, + { // 일요일 + } + }; + +// @Override +// public void searchShuttleTime(String departEng, String arrivalEng, StringBuilder resultNow, StringBuilder resultNext) throws ParseException { +// TimeZone timeZone = TimeZone.getTimeZone("Asia/Seoul"); +// Calendar currentTime = Calendar.getInstance(timeZone); // 오늘 일자의 Calendar 객체 +// +// String[] shuttleTimeTable; +// int dayType = (currentTime.get(Calendar.DAY_OF_WEEK) + 5) % 7; +// +// if (!departEng.equalsIgnoreCase("station")) { // 출발지가 천안역이 아니라면? +// shuttleTimeTable = departEng.equalsIgnoreCase("koreatech") ? shuttleFromKoreatech[dayType] : shuttleFromTerminal[dayType]; +// } else { // 천안역이라면? +// shuttleTimeTable = arrivalEng.equalsIgnoreCase("koreatech") ? shuttleFromStationToKoreatech[dayType] : shuttleFromStationToTerminal[dayType]; +// } +// +// int resultIndex = appendTime(shuttleTimeTable, 0, KakaoBotEnum.BusType.SHUTTLE.ordinal(), resultNow); +// resultIndex = appendTime(shuttleTimeTable, resultIndex + 1, KakaoBotEnum.BusType.SHUTTLE.ordinal(), resultNext); +// } + + @Override + protected String[] getShuttleTimetable(String departEng, String arrivalEng) { + TimeZone timeZone = TimeZone.getTimeZone("Asia/Seoul"); + Calendar currentTime = Calendar.getInstance(timeZone); // 오늘 일자의 Calendar 객체 + int dayType = (currentTime.get(Calendar.DAY_OF_WEEK) + 5) % 7; + + if (!departEng.equalsIgnoreCase("station")) { // 출발지가 천안역이 아니라면? + return departEng.equalsIgnoreCase("koreatech") ? shuttleFromKoreatech[dayType] : shuttleFromTerminal[dayType]; + } else { // 천안역이라면? + return arrivalEng.equalsIgnoreCase("koreatech") ? shuttleFromStationToKoreatech[dayType] : shuttleFromStationToTerminal[dayType]; + } + } +} diff --git a/src/main/java/koreatech/in/service/CalendarServiceImpl.java b/src/main/java/koreatech/in/service/CalendarServiceImpl.java index 310a6c75..ac1be68b 100644 --- a/src/main/java/koreatech/in/service/CalendarServiceImpl.java +++ b/src/main/java/koreatech/in/service/CalendarServiceImpl.java @@ -5,6 +5,7 @@ import koreatech.in.exception.NotFoundException; import koreatech.in.exception.PreconditionFailedException; import koreatech.in.repository.CalendarMapper; +import koreatech.in.skillresponse.KakaoBot; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; @@ -31,21 +32,24 @@ public List getCalendars(String year) { } @Override - public Map getTerm() throws Exception { - String term = valueOps.get("termCode"); + public Map getTerm() { + String termCode = valueOps.get("termCode"); // 데이터 존재여부 확인 - if (term == null) { + if (termCode == null) { throw new NotFoundException(new ErrorMessage("저장된 학기 코드가 없습니다.", 0)); } return new HashMap() {{ - put("term", term); + put("term", termCode); }}; } @Override - public String createTermForAdmin(String term) { - valueOps.set("termCode", term); - return term; + public String createTermForAdmin(String termCode) { + if (!KakaoBot.TermCode.isValidTermCode(termCode)) { + throw new PreconditionFailedException(new ErrorMessage("올바른 학기 코드가 아닙니다.", 0)); + } + valueOps.set("termCode", termCode); + return termCode; } } diff --git a/src/main/java/koreatech/in/service/KakaoBotServiceImpl.java b/src/main/java/koreatech/in/service/KakaoBotServiceImpl.java index 020be427..2d6a450e 100644 --- a/src/main/java/koreatech/in/service/KakaoBotServiceImpl.java +++ b/src/main/java/koreatech/in/service/KakaoBotServiceImpl.java @@ -4,10 +4,14 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import koreatech.in.domain.KakaoBot; +import koreatech.in.domain.KakaoBot.BusFactory; +import koreatech.in.domain.KakaoBot.BusForTerm; +import koreatech.in.skillresponse.KakaoBot; import koreatech.in.skillresponse.SkillResponse; +import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -21,6 +25,8 @@ @Service public class KakaoBotServiceImpl implements KakaoBotService { + @Resource(name="redisTemplate") + private ValueOperations valueOps; @Override public String checkJsonNull(JsonElement nullableJson) { @@ -106,22 +112,11 @@ public String calculateBus(String departKorean, String arrivalKorean) throws IOE StringBuilder resultNow = new StringBuilder("[바로 도착]\n"); StringBuilder resultNext = new StringBuilder("[다음 도착]\n"); + BusForTerm bus = BusFactory.createBus(valueOps.get("termCode")); // 셔틀버스 운행정보 - KakaoBot.searchShuttleTime(departEnglish, arrivalEnglish, resultNow, resultNext); // 학기중 셔틀버스 - // 방학중 셔틀버스(주말과 공휴일 운영 X) - /* - 대학 출발 - 14:00 - - 터미널 출발 - 14:25 - - 천안역 > 학교 - 14:30 - */ - + bus.searchShuttleTime(departEnglish, arrivalEnglish, resultNow, resultNext); // 대성고속 운행정보 - KakaoBot.searchExpressTime(departEnglish, arrivalEnglish, resultNow, resultNext); + bus.searchExpressTime(departEnglish, arrivalEnglish, resultNow, resultNext); // 시내버스 운행정보 String URL = String.format("https://api.koreatech.in/buses?depart=%s&arrival=%s", departEnglish, arrivalEnglish); diff --git a/src/main/java/koreatech/in/skillresponse/KakaoBotEnum.java b/src/main/java/koreatech/in/skillresponse/KakaoBot.java similarity index 61% rename from src/main/java/koreatech/in/skillresponse/KakaoBotEnum.java rename to src/main/java/koreatech/in/skillresponse/KakaoBot.java index 841662b5..c3efe45e 100644 --- a/src/main/java/koreatech/in/skillresponse/KakaoBotEnum.java +++ b/src/main/java/koreatech/in/skillresponse/KakaoBot.java @@ -1,6 +1,28 @@ package koreatech.in.skillresponse; -public class KakaoBotEnum { +import java.util.HashMap; +import java.util.Map; + +public class KakaoBot { + private static final Map changeWord = new HashMap() {{ + put("아침", "BREAKFAST"); + put("점심", "LUNCH"); + put("저녁", "DINNER"); + put("한기대", "koreatech"); + put("야우리", "terminal"); + put("천안역", "station"); + }}; + + private static final String[] restaurantList = {"한식", "일품식", "특식", "양식", "능수관", "수박여"}; //"2캠퍼스" + + public static String[] getRestaurantList() { + return restaurantList; + } + + public static String getChangedWord(String beforeWord) { + return changeWord.get(beforeWord); + } + public enum TemplateType { SIMPLETEXT("simpleText"), // 간단한 텍스트형 출력 요소 SIMPLEIMAGE("simpleImage"), // 간단한 이미지형 출력 요소 @@ -61,14 +83,42 @@ public String getTypeText() { public enum BusType { SHUTTLE("학교셔틀"), - EXPRESS("고속버스"), - CITY("시내버스") - ; + EXPRESS("대성고속"), + CITY("시내버스"); private String typeText; - BusType(String typeText) { this.typeText = typeText; } + BusType(String typeText) { + this.typeText = typeText; + } + + public String getTypeText() { + return typeText; + } + } + + public enum TermCode { + FIRST_REGULAR_SEMESTER(10), + FIRST_SEASONAL_SEMESTER(11), + FIRST_VACATION(12), + SECOND_REGULAR_SEMESTER(20), + SECOND_SEASONAL_SEMESTER(21), + SECOND_VACATION(22); - public String getTypeText() { return typeText; } + private int termCode; + + TermCode(int termCode) { + this.termCode = termCode; + } + + public static boolean isValidTermCode(String termCode) { + for (TermCode code : TermCode.values()) + if (termCode.equals(String.valueOf(code.getTermCode()))) return true; + return false; + } + + public int getTermCode() { + return termCode; + } } } diff --git a/src/main/java/koreatech/in/skillresponse/SkillResponse.java b/src/main/java/koreatech/in/skillresponse/SkillResponse.java index c90ac5ca..9cb5a9bd 100644 --- a/src/main/java/koreatech/in/skillresponse/SkillResponse.java +++ b/src/main/java/koreatech/in/skillresponse/SkillResponse.java @@ -37,7 +37,7 @@ public void addSimpleText(String text) throws PreconditionFailedException { JsonObject field = new JsonObject(); JsonObject type = new JsonObject(); field.addProperty("text", text); - type.add(KakaoBotEnum.TemplateType.SIMPLETEXT.getTypeText(), field); + type.add(KakaoBot.TemplateType.SIMPLETEXT.getTypeText(), field); outputs.add(type); } @@ -48,7 +48,7 @@ public void addSimpleImage(String imageUrl, String altText) throws PreconditionF JsonObject type = new JsonObject(); field.addProperty("imageUrl", imageUrl); field.addProperty("altText", altText); - type.add(KakaoBotEnum.TemplateType.SIMPLEIMAGE.getTypeText(), field); + type.add(KakaoBot.TemplateType.SIMPLEIMAGE.getTypeText(), field); outputs.add(type); } @@ -96,14 +96,14 @@ public JsonElement build() { if (description != null) field.addProperty("description", description); if (thumbnail != null) field.add("thumbnail", thumbnail); if (buttons.size() != 0) field.add("buttons", buttons); - type.add(KakaoBotEnum.TemplateType.BASICCARD.getTypeText(), field); + type.add(KakaoBot.TemplateType.BASICCARD.getTypeText(), field); return type; } } public void addQujckReplies(String label, String action, String messageText) throws PreconditionFailedException { if (quickReplies.size() >= 10) throw new PreconditionFailedException(new ErrorMessage("quickReplies의 제한은 10개 이하입니다.", 0)); - if (!action.equals(KakaoBotEnum.QuickRepliesActionType.MESSAGE.getTypeText())) + if (!action.equals(KakaoBot.QuickRepliesActionType.MESSAGE.getTypeText())) throw new PreconditionFailedException(new ErrorMessage("quickReplies의 action이 올바르게 설정되지 않았습니다.", 0)); if (label.length() > 8) throw new PreconditionFailedException(new ErrorMessage("quickReplies에서 label은 최대 8자 제한입니다.", 0)); @@ -117,7 +117,7 @@ public void addQujckReplies(String label, String action, String messageText) thr public void addQujckReplies(String label, String action, String messageText, String blockId) throws Exception { if (quickReplies.size() >= 10) throw new PreconditionFailedException(new ErrorMessage("quickReplies의 제한은 10개 이하입니다.", 0)); - if (!action.equals(KakaoBotEnum.QuickRepliesActionType.BLOCK.getTypeText())) + if (!action.equals(KakaoBot.QuickRepliesActionType.BLOCK.getTypeText())) throw new PreconditionFailedException(new ErrorMessage("quickReplies의 action이 올바르게 설정되지 않았습니다.", 0)); if (label.length() > 8) throw new PreconditionFailedException(new ErrorMessage("quickReplies에서 label은 최대 8자 제한입니다.", 0)); @@ -230,23 +230,23 @@ public JsonObject build() throws PreconditionFailedException { JsonObject button = new JsonObject(); button.addProperty("action", action); button.addProperty("label", label); - if (action.equals(KakaoBotEnum.ButtonActionType.WEBLINK.getTypeText())) { + if (action.equals(KakaoBot.ButtonActionType.WEBLINK.getTypeText())) { if (webLinkUrl == null) throw new PreconditionFailedException(new ErrorMessage("Button에서 action이 webLink일 경우, webLinkUrl은 필수 설정 항목입니다.", 0)); button.addProperty("webLinkUrl", webLinkUrl); - } else if (action.equals(KakaoBotEnum.ButtonActionType.OSLINK.getTypeText())) { + } else if (action.equals(KakaoBot.ButtonActionType.OSLINK.getTypeText())) { if (osLink == null) throw new PreconditionFailedException(new ErrorMessage("Button에서 action이 osLink일 경우, osLink는 필수 설정 항목입니다.", 0)); button.addProperty("osLink", osLink); - } else if (action.equals(KakaoBotEnum.ButtonActionType.MESSAGE.getTypeText())) { + } else if (action.equals(KakaoBot.ButtonActionType.MESSAGE.getTypeText())) { if (messageText == null) throw new PreconditionFailedException(new ErrorMessage("Button에서 action이 message일 경우, messageText는 필수 설정 항목입니다.", 0)); button.addProperty("messageText", messageText); - } else if (action.equals(KakaoBotEnum.ButtonActionType.PHONE.getTypeText())) { + } else if (action.equals(KakaoBot.ButtonActionType.PHONE.getTypeText())) { if (phoneNumber == null) throw new PreconditionFailedException(new ErrorMessage("Button에서 action이 phone일 경우, phoneNumber은 필수 설정 항목입니다.", 0)); button.addProperty("phoneNumber", phoneNumber); - } else if (action.equals(KakaoBotEnum.ButtonActionType.BLOCK.getTypeText())) { + } else if (action.equals(KakaoBot.ButtonActionType.BLOCK.getTypeText())) { if (phoneNumber == null) throw new PreconditionFailedException(new ErrorMessage("Button에서 action이 block일 경우, blockId은 필수 설정 항목입니다.", 0)); button.addProperty("blockId", blockId); diff --git a/src/main/webapp/WEB-INF/servlet-context.xml b/src/main/webapp/WEB-INF/servlet-context.xml index d3ac9570..38080072 100644 --- a/src/main/webapp/WEB-INF/servlet-context.xml +++ b/src/main/webapp/WEB-INF/servlet-context.xml @@ -17,12 +17,6 @@ - - - - - -