Skip to content

Commit 7d23520

Browse files
refactor : searchFestival-search-logic (#60)
1 parent c61853b commit 7d23520

2 files changed

Lines changed: 59 additions & 1 deletion

File tree

tour/src/main/java/com/jocketdan/tour/dto/openApi/SearchFestivalResponseDTO.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,36 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import lombok.AccessLevel;
55
import lombok.Getter;
6+
import lombok.Setter;
67
import lombok.experimental.FieldDefaults;
78

89
import java.util.List;
910

1011
@Getter
12+
@Setter
1113
@FieldDefaults(level = AccessLevel.PRIVATE)
1214
@JsonIgnoreProperties(ignoreUnknown = true)
1315
public class SearchFestivalResponseDTO {
1416
Response response;
1517

1618
@Getter
19+
@Setter
1720
@FieldDefaults(level = AccessLevel.PRIVATE)
1821
public static class Response {
1922
Header header;
2023
Body body;
2124
}
2225

2326
@Getter
27+
@Setter
2428
@FieldDefaults(level = AccessLevel.PRIVATE)
2529
public static class Header {
2630
String resultCode;
2731
String resultMsg;
2832
}
2933

3034
@Getter
35+
@Setter
3136
@FieldDefaults(level = AccessLevel.PRIVATE)
3237
public static class Body {
3338
Items items;
@@ -37,12 +42,14 @@ public static class Body {
3742
}
3843

3944
@Getter
45+
@Setter
4046
@FieldDefaults(level = AccessLevel.PRIVATE)
4147
public static class Items {
4248
List<Item> item;
4349
}
4450

4551
@Getter
52+
@Setter
4653
@FieldDefaults(level = AccessLevel.PRIVATE)
4754
@JsonIgnoreProperties(ignoreUnknown = true)
4855
public static class Item {

tour/src/main/java/com/jocketdan/tour/service/TourOpenApiService.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.springframework.stereotype.Service;
1313
import org.springframework.transaction.annotation.Transactional;
1414

15+
import java.util.List;
1516
import java.util.Map;
1617
import 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

Comments
 (0)