|
|
@@ -3,9 +3,19 @@
|
|
|
*/
|
|
|
package kr.co.zumo.app.lifeplus.model.module;
|
|
|
|
|
|
+import android.util.Log;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
import io.reactivex.Single;
|
|
|
+import io.reactivex.functions.Consumer;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.CategoryBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.SearchContentsBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.SearchRequestBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.SearchResultBean;
|
|
|
+import kr.co.zumo.app.lifeplus.bean.api.TagBean;
|
|
|
import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
|
|
|
|
|
|
/**
|
|
|
@@ -19,8 +29,87 @@ import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
|
|
|
* @since 2019. 1. 11.
|
|
|
*/
|
|
|
public class APISearchModule extends LifeplusAPIModule<SearchRequestBean, SearchResultBean> {
|
|
|
+
|
|
|
+ private static List<SearchContentsBean> searchContentsBeans;
|
|
|
+ private static List<TagBean> tagBeans;
|
|
|
+ private static List<CategoryBean> categoryBeans;
|
|
|
+ private static String keyword;
|
|
|
+
|
|
|
@Override
|
|
|
protected Single<SearchResultBean> getAPI(SearchRequestBean requestBean) {
|
|
|
- return new LifeplusAPIRepository().search(requestBean);
|
|
|
+ String categoryNo = requestBean.getCategoryNumber();
|
|
|
+ String filters = requestBean.getFilter() + requestBean.getFilterArea() + requestBean.getFilterPlace();
|
|
|
+ if ("".equals(filters) && null != searchContentsBeans) {
|
|
|
+ // 필터가 없을 때만 적용
|
|
|
+ List<SearchContentsBean> list = new ArrayList<>();
|
|
|
+ if ("".equals(categoryNo)) {
|
|
|
+ if (requestBean.getKeyword().equals(keyword)) {
|
|
|
+ // 같은 키워드 ('전체') 선택 시
|
|
|
+ list.addAll(searchContentsBeans);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 카테고리를 구분할 때 저장된 데이터 중 골라 줌.
|
|
|
+ int len = searchContentsBeans.size();
|
|
|
+ SearchContentsBean bean;
|
|
|
+ for (int i = 0; i < len; ++i) {
|
|
|
+ bean = searchContentsBeans.get(i);
|
|
|
+ if (categoryNo.equals(bean.getCategoryNo())) {
|
|
|
+ list.add(bean);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (list.size() > 0) {
|
|
|
+ Log.w("APP# APISearchModule | getAPI", "|" + " ************** cache return ***************");
|
|
|
+ return Single.fromCallable(() -> {
|
|
|
+ List<TagBean> tags = new ArrayList<>(tagBeans);
|
|
|
+ List<CategoryBean> categorys = new ArrayList<>(categoryBeans);
|
|
|
+ SearchResultBean searchResultBean = new SearchResultBean();
|
|
|
+ searchResultBean.setCode(LifeplusAPIBean.RETURN_SUCCESS);
|
|
|
+ searchResultBean.setTagBeans(tags);
|
|
|
+ searchResultBean.setCategoryBeans(categorys);
|
|
|
+ searchResultBean.setData(list);
|
|
|
+ searchResultBean.setListCount(list.size());
|
|
|
+ return searchResultBean;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return new LifeplusAPIRepository().search(requestBean).doOnSuccess(new Consumer<SearchResultBean>() {
|
|
|
+ @Override
|
|
|
+ public void accept(SearchResultBean searchResultBean) throws Exception {
|
|
|
+ if ("".equals(filters)) {
|
|
|
+ // 필터가 없을 때만 적용
|
|
|
+ if ("".equals(categoryNo)) {
|
|
|
+ // 필터 없는 데이터
|
|
|
+ // 로드한 전체 데이터 저장
|
|
|
+ keyword = requestBean.getKeyword();
|
|
|
+ searchContentsBeans = new ArrayList<>();
|
|
|
+ if (null != searchResultBean.getData()) {
|
|
|
+ searchContentsBeans.addAll(searchResultBean.getData());
|
|
|
+ }
|
|
|
+ tagBeans = new ArrayList<>();
|
|
|
+ if (null != searchResultBean.getTagBeans()) {
|
|
|
+ tagBeans.addAll(searchResultBean.getTagBeans());
|
|
|
+ }
|
|
|
+ categoryBeans = new ArrayList<>();
|
|
|
+ if (null != searchResultBean.getCategoryBeans()) {
|
|
|
+ categoryBeans.addAll(searchResultBean.getCategoryBeans());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * clear cache
|
|
|
+ */
|
|
|
+ public static void clearCache() {
|
|
|
+ searchContentsBeans = null;
|
|
|
+ tagBeans = null;
|
|
|
+ keyword = null;
|
|
|
+ categoryBeans = null;
|
|
|
}
|
|
|
}
|