1212import org .springframework .stereotype .Service ;
1313import org .springframework .transaction .annotation .Transactional ;
1414
15+ import java .util .List ;
1516import java .util .Map ;
1617import java .util .Objects ;
1718
@@ -55,7 +56,7 @@ public SearchFestivalResponseDTO getSearchFestival(
5556 String eventStartDate ,
5657 String eventEndDate
5758 ) {
58- return publicDataApiClient .call (
59+ SearchFestivalResponseDTO response = publicDataApiClient .call (
5960 "/searchFestival2" ,
6061 Map .of (
6162 "numOfRows" , numOfRows ,
@@ -68,6 +69,8 @@ public SearchFestivalResponseDTO getSearchFestival(
6869 ),
6970 SearchFestivalResponseDTO .class
7071 );
72+
73+ return filterFestivalsByDateRange (response , eventStartDate , eventEndDate );
7174 }
7275
7376 public SearchKeywordResponseDTO getSearchKeyword (
@@ -184,4 +187,52 @@ private OpenApiPlaceDetail convertToEntity(DetailsResponseDTO dto, String conten
184187 item .getCpyrhtDivCd ()
185188 );
186189 }
190+
191+ private SearchFestivalResponseDTO filterFestivalsByDateRange (
192+ SearchFestivalResponseDTO response ,
193+ String filterStartDate ,
194+ String filterEndDate
195+ ) {
196+ if (response == null || response .getResponse () == null
197+ || response .getResponse ().getBody () == null
198+ || response .getResponse ().getBody ().getItems () == null ) {
199+ return response ;
200+ }
201+
202+ List <SearchFestivalResponseDTO .Item > items = response .getResponse ().getBody ().getItems ().getItem ();
203+ if (items == null || items .isEmpty ()) {
204+ return response ;
205+ }
206+
207+ List <SearchFestivalResponseDTO .Item > filteredItems = items .stream ()
208+ .filter (item -> isEventInDateRange (item , filterStartDate , filterEndDate ))
209+ .toList ();
210+
211+ SearchFestivalResponseDTO filteredResponse = new SearchFestivalResponseDTO ();
212+ SearchFestivalResponseDTO .Response newResponse = new SearchFestivalResponseDTO .Response ();
213+ SearchFestivalResponseDTO .Body newBody = new SearchFestivalResponseDTO .Body ();
214+ SearchFestivalResponseDTO .Items newItems = new SearchFestivalResponseDTO .Items ();
215+
216+ newItems .setItem (filteredItems );
217+ newBody .setItems (newItems );
218+ newBody .setTotalCount (filteredItems .size ());
219+ newBody .setNumOfRows (response .getResponse ().getBody ().getNumOfRows ());
220+ newBody .setPageNo (response .getResponse ().getBody ().getPageNo ());
221+ newResponse .setBody (newBody );
222+ newResponse .setHeader (response .getResponse ().getHeader ());
223+ filteredResponse .setResponse (newResponse );
224+
225+ return filteredResponse ;
226+ }
227+
228+ private boolean isEventInDateRange (SearchFestivalResponseDTO .Item item , String filterStartDate , String filterEndDate ) {
229+ String eventStart = item .getEventstartdate ();
230+ String eventEnd = item .getEventenddate ();
231+
232+ if (eventStart == null || eventEnd == null ) {
233+ return false ;
234+ }
235+
236+ return eventStart .compareTo (filterStartDate ) >= 0 && eventEnd .compareTo (filterEndDate ) <= 0 ;
237+ }
187238}
0 commit comments