@@ -50,9 +50,12 @@ public WeatherSummary getWeatherSummary(Long id, int date, int hour) {
5050 Weather weather = weatherRepository .findByDateAndTimeAndPlace (date , hour * 100 , place )
5151 .orElseThrow (WeatherNotFound ::new );
5252
53- List <Integer > relevantDates = calculateRelevantDates ();
53+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyyMMdd" );
54+ LocalDateTime requestTime = toLocalDateTime (date , hour );
55+ int first = Integer .parseInt (requestTime .minusDays (1 ).format (formatter ));
56+ int last = Integer .parseInt (requestTime .plusDays (1 ).format (formatter ));
5457 TideObservatory tideObservatory = TideObservatory .findNearest (place .getLatitude (), place .getLongitude ());
55- List <TideRecord > tideRecords = tideRepository .findAllByDatesAndTideObservatory (relevantDates , tideObservatory );
58+ List <TideRecord > tideRecords = tideRepository .findAllByDatesAndTideObservatory (first , last , tideObservatory );
5659
5760 int tidePercentage = calculateTidePercentage (tideRecords );
5861 return WeatherSummary .of (
@@ -67,21 +70,31 @@ public WeatherDetail getWeatherDetail(Long placeId, int date, int hour) {
6770 Place place = placeRepository .findById (placeId ).orElseThrow (PlaceNotFound ::new );
6871 Weather weather = weatherRepository .findByDateAndTimeAndPlace (date , hour * 100 , place )
6972 .orElseThrow (WeatherNotFound ::new );
70-
71- List <Integer > relevantDates = calculateRelevantDates ();
73+
74+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyyMMdd" );
75+ LocalDateTime requestTime = toLocalDateTime (date , hour );
76+ int first = Integer .parseInt (requestTime .minusDays (1 ).format (formatter ));
77+ int last = Integer .parseInt (requestTime .plusDays (1 ).format (formatter ));
7278 TideObservatory tideObservatory = TideObservatory .findNearest (place .getLatitude (), place .getLongitude ());
73- List <TideRecord > tideRecords = tideRepository .findAllByDatesAndTideObservatory (relevantDates , tideObservatory );
79+ List <TideRecord > tideRecords = tideRepository .findAllByDatesAndTideObservatory (first , last , tideObservatory );
7480
75- LocalDateTime now = LocalDateTime .now ();
76- TideInfo closestPreviousTideRecord = findClosestPreviousTideRecord (tideRecords , now );
77- TideInfo closestNextTideRecord = findClosestNextTideRecord (tideRecords , now );
81+ TideInfo closestPreviousTideRecord = findClosestPreviousTideRecord (tideRecords , requestTime );
82+ TideInfo closestNextTideRecord = findClosestNextTideRecord (tideRecords , requestTime );
83+
84+ List <TideInfo > tideInfoList = new ArrayList <>();
85+ if (closestPreviousTideRecord != null ) {
86+ tideInfoList .add (closestPreviousTideRecord );
87+ }
88+ if (closestNextTideRecord != null ) {
89+ tideInfoList .add (closestNextTideRecord );
90+ }
7891
7992 getAllScores (weather , tideRecords );
8093 int tidePercentage = calculateTidePercentage (tideRecords );
8194 return WeatherDetail .of (
8295 weather ,
8396 new ArrayList <>(),
84- List . of ( closestPreviousTideRecord , closestNextTideRecord ) ,
97+ tideInfoList ,
8598 getAllScores (weather , tideRecords ),
8699 tidePercentage
87100 );
@@ -580,16 +593,6 @@ public List<AvailableTime> getAvailableTime(Integer date, Integer hour) {
580593 .toList ();
581594 }
582595
583- private List <Integer > calculateRelevantDates () {
584- LocalDateTime now = LocalDateTime .now ();
585- DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyyMMdd" );
586- return List .of (
587- Integer .parseInt (now .minusDays (1 ).format (formatter )), // 어제
588- Integer .parseInt (now .format (formatter )), // 오늘
589- Integer .parseInt (now .plusDays (1 ).format (formatter )) // 내일
590- );
591- }
592-
593596 private List <ActivityScore > getAllScores (Weather weather , List <TideRecord > tideRecords ) {
594597 List <ActivityScore > scores = new ArrayList <>();
595598 scores .add (new ActivityScore (SNORKELING .getValue (), calculateSnorkelingScore (weather , tideRecords )));
@@ -616,5 +619,16 @@ private TideInfo findClosestNextTideRecord(List<TideRecord> tideRecords, LocalDa
616619 .map (record -> new TideInfo (record .getTidalLevel (), record .getTidalTime (), record .getCode ()))
617620 .orElse (null ); // Optional에서 직접 null 반환
618621 }
622+
623+ private LocalDateTime toLocalDateTime (int date , int hour ) {
624+ String dateTimeString = "" ;
625+ if (hour == 0 ) {
626+ dateTimeString = String .format ("%08d0000" , date );
627+ } else {
628+ dateTimeString = String .format ("%08d%02d" , date , hour );
629+ }
630+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyyMMddHHmm" );
631+ return LocalDateTime .parse (dateTimeString , formatter );
632+ }
619633}
620634
0 commit comments