2121import java .time .LocalTime ;
2222import java .time .ZoneId ;
2323import java .util .List ;
24+ import java .util .Optional ;
2425import java .util .Set ;
2526import java .util .TreeSet ;
27+ import java .util .stream .Collectors ;
2628
2729@ Service
2830@ RequiredArgsConstructor
@@ -40,14 +42,23 @@ public String requestHandler(RequestDto requestDto) {
4042 // 현재 시간 파악
4143 LocalTime time = getCurrentTime ();
4244
43- // 요청 일반 파라미터 추출
44- DetailParamsItemFieldDto campusName = requestDto .getAction ().getDetailParams ().getSys_campus_name ();
45- DetailParamsItemFieldDto day = requestDto .getAction ().getDetailParams ().getSys_date ();
46- DetailParamsItemFieldDto period = requestDto .getAction ().getDetailParams ().getSys_time_period ();
47- // null이면 값 초기화하기
48- String campusNameValue = (campusName != null ) ? campusName .getValue () : getCampusName (kakaoId );
49- String dayValue = (day != null ) ? day .getValue () : getDay (time ); // 오늘, 내일
50- String periodValue = (period != null ) ? period .getValue () : getPeriodOfDay (time ); // 아침, 점심, 저녁
45+ // // 요청 일반 파라미터 추출
46+ // DetailParamsItemFieldDto campusName = requestDto.getAction().getDetailParams().getSys_campus_name();
47+ // DetailParamsItemFieldDto day = requestDto.getAction().getDetailParams().getSys_date();
48+ // DetailParamsItemFieldDto period = requestDto.getAction().getDetailParams().getSys_time_period();
49+ // // null이면 값 초기화하기
50+ // String campusNameValue = (campusName != null) ? campusName.getValue() : getCampusName(kakaoId);
51+ // String dayValue = (day != null) ? day.getValue() : getDay(time); // 오늘, 내일
52+ // String periodValue = (period != null) ? period.getValue() : getPeriodOfDay(time); // 아침, 점심, 저녁
53+
54+ // DetailParams에서 값 추출 (null 체크 포함)
55+ String campusNameValue = extractValue (requestDto .getAction ().getDetailParams ().getSys_campus_name ())
56+ .orElseGet (() -> getCampusName (kakaoId ));
57+ String dayValue = extractValue (requestDto .getAction ().getDetailParams ().getSys_date ())
58+ .orElseGet (() -> getDay (time ));
59+ String periodValue = extractValue (requestDto .getAction ().getDetailParams ().getSys_time_period ())
60+ .orElseGet (() -> getPeriodOfDay (time ));
61+
5162 // 요청 필수 파라미터 추출
5263 String cafeteriaName = requestDto .getAction ().getParams ().getSys_cafeteria_name ();
5364
@@ -60,6 +71,13 @@ public String requestHandler(RequestDto requestDto) {
6071 return makeResponse (parameters );
6172 }
6273
74+
75+ // 기본값 설정 유틸
76+ private Optional <String > extractValue (DetailParamsItemFieldDto fieldDto ) {
77+ return Optional .ofNullable (fieldDto ).map (DetailParamsItemFieldDto ::getValue );
78+ }
79+
80+
6381 // response 생성 로직
6482 public String makeResponse (HandleRequestDto parameters ) {
6583 int campusId = campusServiceV2 .getCampusId (parameters .getCampusName ());
@@ -177,24 +195,54 @@ public String mappingResponse(HandleRequestDto parameters, String imgUrl, String
177195
178196
179197 // quickReply 객체 생성
198+ // private List<QuickReplyDto> mappingQuickReply(HandleRequestDto parameters) {
199+ // return switch (parameters.getPeriod()) {
200+ // case "아침" -> List.of(
201+ // new QuickReplyDto("점심", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 점심 메뉴"),
202+ // new QuickReplyDto("저녁", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 저녁 메뉴")
203+ // );
204+ // case "점심" -> List.of(
205+ // new QuickReplyDto("아침", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 아침 메뉴"),
206+ // new QuickReplyDto("저녁", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 저녁 메뉴")
207+ // );
208+ // default -> List.of(
209+ // new QuickReplyDto("아침", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 아침 메뉴"),
210+ // new QuickReplyDto("점심", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 점심 메뉴")
211+ // );
212+ // };
213+ // }
214+
215+
216+
180217 private List <QuickReplyDto > mappingQuickReply (HandleRequestDto parameters ) {
181- return switch (parameters .getPeriod ()) {
182- case "아침" -> List . of (
183- new QuickReplyDto ( "점심" , "message" , parameters . getCampusName () + " " + parameters . getCafeteriaName () + " " + parameters . getDay () + " 점심 메뉴" ),
184- new QuickReplyDto ( "저녁" , "message" , parameters . getCampusName () + " " + parameters . getCafeteriaName () + " " + parameters . getDay () + " 저녁 메뉴" )
185- );
186- case "점심" -> List . of (
187- new QuickReplyDto ( "아침" , "message" , parameters . getCampusName () + " " + parameters . getCafeteriaName () + " " + parameters . getDay () + " 아침 메뉴" ),
188- new QuickReplyDto ( "저녁" , "message" , parameters . getCampusName () + " " + parameters . getCafeteriaName () + " " + parameters . getDay () + " 저녁 메뉴" )
189- );
190- default -> List . of (
191- new QuickReplyDto ( "아침" , "message" , parameters . getCampusName () + " " + parameters . getCafeteriaName () + " " + parameters . getDay () + " 아침 메뉴" ),
192- new QuickReplyDto ( "점심" , "message" , parameters . getCampusName () + " " + parameters . getCafeteriaName () + " " + parameters . getDay () + " 점심 메뉴" )
193- );
218+ List < String > periods = getNextMealPeriods (parameters .getPeriod ());
219+ return periods . stream ()
220+ . map ( period -> createQuickReply ( period , parameters ))
221+ . collect ( Collectors . toList ());
222+ }
223+
224+
225+ // 현재 시간대(period)에 따라 다음 선택할 식사 시간대를 반환
226+ private List < String > getNextMealPeriods ( String currentPeriod ) {
227+ return switch ( currentPeriod ) {
228+ case "아침" -> List . of ( "점심" , "저녁" );
229+ case "점심" -> List . of ( "아침" , "저녁" );
230+ default -> List . of ( "아침" , "점심" );
194231 };
195232 }
196233
197234
235+ // QuickReplyDto 객체를 생성하는 메서드
236+ private QuickReplyDto createQuickReply (String period , HandleRequestDto parameters ) {
237+ String message = String .format ("%s %s %s %s 메뉴" ,
238+ parameters .getCampusName (),
239+ parameters .getCafeteriaName (),
240+ parameters .getDay (),
241+ period );
242+ return new QuickReplyDto (period , "message" , message );
243+ }
244+
245+
198246 // 일반 파라미터 값 채우기
199247 // sys_campus_name 파라미터 초기화
200248 public String getCampusName (String kakaoId ) {
0 commit comments