|
|
@@ -3,10 +3,20 @@
|
|
|
*/
|
|
|
package kr.co.zumo.app.lifeplus.model.module;
|
|
|
|
|
|
+import android.util.Log;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import io.reactivex.Observable;
|
|
|
import io.reactivex.Single;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.FilterDetailRequestBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.SearchFilterBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.SearchFilterDetailResultBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.SearchFilterResultBean;
|
|
|
import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
|
|
|
+import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIService;
|
|
|
|
|
|
/**
|
|
|
* APISearchFilterModule
|
|
|
@@ -22,7 +32,49 @@ public class APISearchFilterModule extends LifeplusAPIModule<RequestBean, Search
|
|
|
|
|
|
@Override
|
|
|
protected Single<SearchFilterResultBean> getAPI(RequestBean requestBean) {
|
|
|
- return new LifeplusAPIRepository().getFilter(requestBean);
|
|
|
- }
|
|
|
+ return new LifeplusAPIRepository().getFilter(requestBean)
|
|
|
+ // 속성이 02, 03 인 것 세부 설정 로드 후 combine
|
|
|
+ .flatMap(searchFilterResultBean -> {
|
|
|
+ List<SearchFilterBean> list = searchFilterResultBean.getData();
|
|
|
+ if (null != list && list.size() > 0) {
|
|
|
+ List<Observable<SearchFilterDetailResultBean>> detailList = new ArrayList<>();
|
|
|
+ for (SearchFilterBean filterBean : list) {
|
|
|
+ String type = filterBean.getFilterType();
|
|
|
+ // 지역/핫플레이스 는 세부 필터까지 로드 해서 반환
|
|
|
+ if (type.equals(SearchFilterBean.FILTER_TYPE_AREA)
|
|
|
+ || SearchFilterBean.FILTER_TYPE_HOT_PLACE.equals(type)) {
|
|
|
+ detailList.add(new LifeplusAPIService().getFilterDetail(new FilterDetailRequestBean(type, filterBean.getFilterNo()))
|
|
|
+ .map(searchFilterDetailResultBean -> {
|
|
|
+ // 결과를 구분하기 위한 속성 맵핑
|
|
|
+ searchFilterDetailResultBean.setSearchFilterBean(filterBean);
|
|
|
+ searchFilterDetailResultBean.setFilterName(filterBean.getFilterName());
|
|
|
+ searchFilterDetailResultBean.setFilterType(filterBean.getFilterType());
|
|
|
+ searchFilterDetailResultBean.setFilterNo(filterBean.getFilterNo());
|
|
|
+ return searchFilterDetailResultBean;
|
|
|
+ }).toObservable());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ if (detailList.size() > 0) {
|
|
|
+ // 각 속성들을 모두 병합하여 리턴
|
|
|
+ return Single.fromObservable(Observable.combineLatest(detailList, objects -> {
|
|
|
+ Log.w("APP# APISearchFilterModule | apply", "|" + " objects.length = " + objects.length);
|
|
|
+ for (Object object : objects) {
|
|
|
+ if (object instanceof SearchFilterDetailResultBean) {
|
|
|
+ SearchFilterDetailResultBean resultBean = (SearchFilterDetailResultBean) object;
|
|
|
+ SearchFilterBean filterBean = resultBean.getSearchFilterBean();
|
|
|
+ if (null != resultBean.getData() && resultBean.getData().size() > 0) {
|
|
|
+ filterBean.setTagBeans(resultBean.getData());
|
|
|
+ Log.w("APP# APISearchFilterModule | apply", "|" + resultBean.toJson());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return searchFilterResultBean;
|
|
|
+ }));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return Single.fromCallable(() -> searchFilterResultBean);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|