浏览代码

[공통][New] 개별 북마크 api 수정 - listItemNo 추가 2

hyodong.min 6 年之前
父节点
当前提交
f0e3517afd

+ 6 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/BookmarkBean.java

@@ -38,6 +38,12 @@ public class BookmarkBean extends LifeplusContentsBean {
     setContentsUrl(contentsBean.getContentsUrl());
     setLiked(contentsBean.isLiked());
     setBookmarked(contentsBean.isBookmarked());
+    setListItemNo(contentsBean.getItemNo());  // 기본 값으로 itemNo 를 채운다.
+  }
+
+  public BookmarkBean(ContentsItemBean contentsItemBean) {
+    this((LifeplusContentsBean) contentsItemBean);
+    setListItemNo(contentsItemBean.getListItemNo());
   }
 
   /**

+ 10 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/ContentsFlagHelper.java

@@ -30,6 +30,7 @@ import kr.co.zumo.app.lifeplus.model.module.IAPIModuleSimpleListener;
 import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
 import kr.co.zumo.app.lifeplus.network.api.ParameterMapper;
 import kr.co.zumo.app.lifeplus.util.AppUtil;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
 
 /**
  * ContentsFlagHelper
@@ -85,6 +86,15 @@ public class ContentsFlagHelper implements IFlags {
             Log.w("APP# ContentsFlagHelper | load", "| loaded: " + resultBean.toJson());
             if (resultBean.isSuccess()) {
               contentsFlagBean = resultBean.getData();
+
+              // page number (listItemNo) 가 없을 경우 contents number (itemNo) 로 맵핑
+              if (null != contentsFlagBean.getBookmarkedList()) {
+                for (ListItemNumberBean listItemNumberBean : contentsFlagBean.getBookmarkedList()) {
+                  if (StringUtil.isEmpty(listItemNumberBean.getListItemNo())) {
+                    listItemNumberBean.setListItemNo(listItemNumberBean.getItemNo());
+                  }
+                }
+              }
             }
           }
           else {

+ 20 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsBaseModel.java

@@ -23,6 +23,7 @@ import kr.co.zumo.app.lifeplus.model.module.APIError;
 import kr.co.zumo.app.lifeplus.model.module.APIModuleSimpleListener;
 import kr.co.zumo.app.lifeplus.supervisor.ContentsFlagHelper;
 import kr.co.zumo.app.lifeplus.supervisor.GuestLikedManager;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.screen.my.bookmark.BookmarkModelHelper;
 
@@ -298,12 +299,29 @@ public abstract class ContentsBaseModel extends Model {
     disposableBookmarked = ContentsFlagHelper.getInstance().updateBookmarked(new ContentsBookmarkRequestBean(getUserName(), bean.getItemNo(), bean.getListItemNo(), LifeplusData.valueOf(toChecked)), new APIModuleSimpleListener<LifeplusAPIBean>() {
       @Override
       public void onApiSuccess(LifeplusAPIBean resultBean) {
+        // todo 북마크 후 리스트에 필요한 결과값 (타이틀/서브타이틀/이미지 등) 필요.
+        // 서버에서 오지 않는다면, 직접 컨텐츠 들에서 가져온다.
+        /**
+         * 이미지 - 현재 페이지의 기본 이미지 (최대한 작은 것으로), 없다면 커버이미지
+         * 타이틀 - 언제나 커버 타이틀
+         * 서브타이틀 - 현재 페이지의 타이틀, 없으면 공백
+         */
+        BookmarkBean bookmarkBean = new BookmarkBean(bean);
+        if (StringUtil.isFull(bean.getOverviewImageUrl())) {
+          bookmarkBean.setImageUrl(bean.getOverviewImageUrl());
+        }
+        else {
+          bookmarkBean.setImageUrl(contentsBean.getImageUrl());
+        }
+        bookmarkBean.setTitle(contentsBean.getTitle());
+        bookmarkBean.setSubTitle(StringUtil.isFull(bean.getTitle()) ? bean.getTitle() : "");
+
         updateItemBookmarked(toChecked);
         if (toChecked) {
-          BookmarkModelHelper.getInstance().addBookmark(new BookmarkBean(contentsBean));
+          BookmarkModelHelper.getInstance().addBookmark(bookmarkBean);
         }
         else {
-          BookmarkModelHelper.getInstance().removeBookmark(contentsBean.getItemNo());
+          BookmarkModelHelper.getInstance().removeBookmark(bean.getItemNo(), bean.getListItemNo());
         }
 
         onResult(new Event.Builder(Event.SUCCESS).integer(Event.CONTENTS_BOOKMARK).bool(toChecked).build());

+ 8 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsModel.java

@@ -93,11 +93,7 @@ public class ContentsModel extends ContentsBaseModel {
 
   @Override
   public ContentsItemBean getShareContents() {
-    if (null != getFirstItem()) {
-      List<ContentsItemBean> list = contentsDetailListBean.getItemDetailList();
-      return list.get(getSharePageIndex());
-    }
-    return ContentsItemBean.toBean(contentsBean);
+    return getItem(getSharePageIndex());
   }
 
   @Override
@@ -115,9 +111,13 @@ public class ContentsModel extends ContentsBaseModel {
 
   @Override
   public ContentsItemBean getCurrentItem() {
+    return getItem(getItemIndex());
+  }
+
+  protected ContentsItemBean getItem(int index) {
     if (null != getFirstItem()) {
       List<ContentsItemBean> list = contentsDetailListBean.getItemDetailList();
-      return list.get(getItemIndex());
+      return list.get(index);
     }
     return ContentsItemBean.toBean(contentsBean);
   }
@@ -243,6 +243,7 @@ public class ContentsModel extends ContentsBaseModel {
 
   public void updateSeriesBookmarked() {
     boolean toChecked = !selectedSeriesItemBean.isBookmarked();
+    // 시리즈에서는 전체 북마크만 가능하기 때문에 listItemNo 가 따로 없다.
     disposableSeriesBookmarked = ContentsFlagHelper.getInstance().updateBookmarked(new ContentsBookmarkRequestBean(getUserName(), selectedSeriesItemBean.getItemNo(), selectedSeriesItemBean.getItemNo(), LifeplusData.valueOf(toChecked)), new APIModuleSimpleListener<LifeplusAPIBean>() {
       @Override
       public void onApiSuccess(LifeplusAPIBean resultBean) {
@@ -251,7 +252,7 @@ public class ContentsModel extends ContentsBaseModel {
           BookmarkModelHelper.getInstance().addBookmark(new BookmarkBean(selectedSeriesItemBean));
         }
         else {
-          BookmarkModelHelper.getInstance().removeBookmark(selectedSeriesItemBean.getItemNo());
+          BookmarkModelHelper.getInstance().removeBookmark(selectedSeriesItemBean.getItemNo(), selectedSeriesItemBean.getItemNo());
         }
 
         onResult(new Event.Builder(Event.SUCCESS).integer(Event.SERIES_BOOKMARK).bool(toChecked).build());

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookMarkListModel.java

@@ -317,10 +317,10 @@ public class BookMarkListModel extends Model {
       public void onApiSuccess(LifeplusAPIBean resultBean) {
         contentsBean.setBookmarked(toChecked);
         if (toChecked) {
-          BookmarkModelHelper.getInstance().restoreBookmarkByNumber(contentsBean.getItemNo());
+          BookmarkModelHelper.getInstance().restoreBookmarkByNumber(contentsBean.getItemNo(), contentsBean.getListItemNo());
         }
         else {
-          BookmarkModelHelper.getInstance().removeBookmarkByNumber(contentsBean.getItemNo());
+          BookmarkModelHelper.getInstance().removeBookmarkByNumber(contentsBean.getItemNo(), contentsBean.getListItemNo());
         }
         onResult(new Event.Builder(Event.SUCCESS).integer(Event.CONTENTS_BOOKMARK).bool(toChecked).index(index).build());
       }

+ 22 - 17
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookmarkModelHelper.java

@@ -11,6 +11,7 @@ import java.util.List;
 import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkBean;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkListResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.ListItemNumberBean;
 import kr.co.zumo.app.lifeplus.bean.api.PageRequestBean;
 import kr.co.zumo.app.lifeplus.model.module.APIBookmarkAtCategoryModule;
 import kr.co.zumo.app.lifeplus.model.module.APIError;
@@ -43,7 +44,7 @@ public class BookmarkModelHelper {
 
   private Disposable disposableBookMarkList;
   private List<BookmarkBean> bookmarkBeans;
-  private List<String> itemNumberForRemoveList;
+  private List<ListItemNumberBean> itemNumberForRemoveList;
 
   private boolean isLoaded = false;
 
@@ -88,8 +89,8 @@ public class BookmarkModelHelper {
 
     int itemLen = itemNumberForRemoveList.size();
     for (int i = 0; i < itemLen; ++i) {
-      String itemNumber = itemNumberForRemoveList.get(i);
-      removeBookmarkInternal(bookmarks, itemNumber);
+      ListItemNumberBean listItemNumberBean = itemNumberForRemoveList.get(i);
+      removeBookmarkInternal(bookmarks, listItemNumberBean.getItemNo(), listItemNumberBean.getListItemNo());
     }
     return bookmarks.size();
   }
@@ -116,24 +117,25 @@ public class BookmarkModelHelper {
    * - 마이 페이지가 아닌 컨텐츠 페이지에서 제거한다.
    * - commit 없이 리스트에 직접 제거한다.
    *
-   * @param itemNumber
+   * @param itemNo
+   * @param listItemNo
    */
-  public void removeBookmark(String itemNumber) {
+  public void removeBookmark(String itemNo, String listItemNo) {
     if (null != bookmarkBeans) {
-      removeBookmarkInternal(bookmarkBeans, itemNumber);
+      removeBookmarkInternal(bookmarkBeans, itemNo, listItemNo);
     }
     else {
       Log.e("APP#  BookmarkModelHelper | removeBookmark", "|" + " not yet loading..");
     }
   }
 
-  private void removeBookmarkInternal(List<BookmarkBean> list, String itemNumber) {
+  private void removeBookmarkInternal(List<BookmarkBean> list, String itemNo, String listItemNo) {
 
     int len = list.size();
     Log.i("APP# BookmarkModelHelper | removeBookmark", "|" + "bookmarkBeans.size => " + list.size());
     for (int k = 0; k < len; ++k) {
       BookmarkBean bean = list.get(k);
-      if (bean.getItemNo().equals(itemNumber)) {
+      if (bean.getItemNo().equals(itemNo) && bean.getListItemNo().equals(listItemNo)) {
         list.remove(k);
         Log.i("APP# BookmarkModelHelper | removeBookmark", "|---> size: " + list.size() + ", removed: \n" + bean.toJson());
         break;
@@ -148,16 +150,17 @@ public class BookmarkModelHelper {
    * - 버킷 리스트와는 달리 북마크는 마이 페이지에서 추가가 불가하다.
    * - 북마크 해제했던 아이템을 복원하는 기능만 있다.
    *
-   * @param itemNumber
+   * @param itemNo
+   * @param listItemNo
    */
-  public void restoreBookmarkByNumber(String itemNumber) {
+  public void restoreBookmarkByNumber(String itemNo, String listItemNo) {
     if (null == itemNumberForRemoveList) {
       itemNumberForRemoveList = new ArrayList<>();
     }
     int len = itemNumberForRemoveList.size();
     for (int i = 0; i < len; ++i) {
-      String number = itemNumberForRemoveList.get(i);
-      if (number.equals(itemNumber)) {
+      ListItemNumberBean listItemNumberBean = itemNumberForRemoveList.get(i);
+      if (listItemNumberBean.getItemNo().equals(itemNo) && listItemNumberBean.getListItemNo().equals(listItemNo)) {
         itemNumberForRemoveList.remove(i);
         break;
       }
@@ -168,13 +171,14 @@ public class BookmarkModelHelper {
    * bookmark 번호로 제거
    * - commit()을 해야 실제 데이터에 적용된다.
    *
-   * @param itemNumber
+   * @param itemNo
+   * @param listItemNo
    */
-  public void removeBookmarkByNumber(String itemNumber) {
+  public void removeBookmarkByNumber(String itemNo, String listItemNo) {
     if (null == itemNumberForRemoveList) {
       itemNumberForRemoveList = new ArrayList<>();
     }
-    itemNumberForRemoveList.add(itemNumber);
+    itemNumberForRemoveList.add(new ListItemNumberBean(itemNo, listItemNo));
   }
 
   /**
@@ -187,8 +191,8 @@ public class BookmarkModelHelper {
 
     int itemLen = itemNumberForRemoveList.size();
     for (int i = 0; i < itemLen; ++i) {
-      String itemNumber = itemNumberForRemoveList.get(i);
-      removeBookmark(itemNumber);
+      ListItemNumberBean listItemNumberBean = itemNumberForRemoveList.get(i);
+      removeBookmark(listItemNumberBean.getItemNo(), listItemNumberBean.getListItemNo());
     }
     itemNumberForRemoveList = null;
   }
@@ -221,6 +225,7 @@ public class BookmarkModelHelper {
         public void onApiEnd() {
           listener.onApiEnd();
         }
+
         @Override
         public void onApiSuccess(BookmarkListResultBean resultBean) {
           bookmarkBeans = resultBean.getData();

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/MyMainModel.java

@@ -278,10 +278,10 @@ public class MyMainModel extends Model {
       public void onApiSuccess(LifeplusAPIBean resultBean) {
         contentsBean.setBookmarked(toChecked);
         if (toChecked) {
-          BookmarkModelHelper.getInstance().restoreBookmarkByNumber(contentsBean.getItemNo());
+          BookmarkModelHelper.getInstance().restoreBookmarkByNumber(contentsBean.getItemNo(), contentsBean.getListItemNo());
         }
         else {
-          BookmarkModelHelper.getInstance().removeBookmarkByNumber(contentsBean.getItemNo());
+          BookmarkModelHelper.getInstance().removeBookmarkByNumber(contentsBean.getItemNo(), contentsBean.getListItemNo());
         }
         onResult(new Event.Builder(Event.SUCCESS).integer(Event.CONTENTS_BOOKMARK).bool(toChecked).index(index).build());
       }