Browse Source

[공통][New] 로그인 정보 파싱을 모듈에서 처리
- 이후 로그인 결과 확인은 verify()로 함

hyodong.min 6 years ago
parent
commit
25dff36c8b

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/APILoginStatusMapper.java

@@ -46,7 +46,7 @@ public class APILoginStatusMapper extends APIModuleReasonListener<LoginResultBea
 
   private void onLoginSuccess(LoginResultBean resultBean) {
     // 정상 처리 됐음
-    if (new LoginModuleParser(memberStatusManager).parse(resultBean)) {
+    if (new LoginModuleParser(memberStatusManager).verify(resultBean)) {
       // 정상 처리 됐음
       listener.onApiSuccess(resultBean);
     }

+ 30 - 22
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/APIMemberSelectModule.java

@@ -5,9 +5,7 @@ package kr.co.zumo.app.lifeplus.model.module;
 
 import java.util.ArrayList;
 
-import io.reactivex.Observable;
 import io.reactivex.Single;
-import io.reactivex.functions.Consumer;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsFlagBean;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsFlagResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.LoginResultBean;
@@ -31,32 +29,42 @@ public class APIMemberSelectModule extends LifeplusAPIModule<RequestBean, LoginR
   @Override
   protected Single<LoginResultBean> getAPI(RequestBean requestBean) {
     // login
-    Single<LoginResultBean> login = new LifeplusAPIRepository().selectMember(requestBean)
-      .doOnSuccess(new Consumer<LoginResultBean>() {
-        @Override
-        public void accept(LoginResultBean loginResultBean) throws Exception {
-          new LoginModuleParser(SuperModel.getInstance()).parse(loginResultBean);
-        }
-      });
+    return new LifeplusAPIRepository().selectMember(requestBean)
+      .doOnError(throwable -> {
+        ContentsFlagHelper.getInstance().dispose();
+        ContentsFlagHelper.getInstance().load().subscribe();
+        new LoginModuleParser(SuperModel.getInstance()).error();
+      })
+      .flatMap(loginResultBean -> {
 
-    // contents flag
-    ContentsFlagHelper.getInstance().dispose();
-    Single<ContentsFlagResultBean> flags = ContentsFlagHelper.getInstance().load()
-      .onErrorReturn(throwable -> { // 에러 시 빈 데이터로 대체
-        ContentsFlagResultBean tempBean = new ContentsFlagResultBean();
-        ContentsFlagBean data = new ContentsFlagBean();
-        data.setBookmarkedList(new ArrayList<>());
-        data.setLikedList(new ArrayList<>());
-        tempBean.setData(data);
-        return new ContentsFlagResultBean();
-      });
+        // 로그인 결과를 파싱 -> 상태를 저장
+        new LoginModuleParser(SuperModel.getInstance()).parse(loginResultBean);
 
-    return Single.fromObservable(Observable.combineLatest(login.toObservable(), flags.toObservable(), (loginResultBean, flagResultBean) -> loginResultBean))
-      .doOnSuccess(loginResultBean -> {
         // 로그인 이후 fcm 토근 저장
         if (loginResultBean.isSuccess()) {
           FirebaseHelper.getInstance().init();
         }
+
+        // contents flag
+        ContentsFlagHelper.getInstance().dispose();
+        return ContentsFlagHelper.getInstance().load()
+          .onErrorReturn(throwable -> { // 에러 시 빈 데이터로 대체
+            ContentsFlagResultBean tempBean = new ContentsFlagResultBean();
+            ContentsFlagBean data = new ContentsFlagBean();
+            data.setBookmarkedList(new ArrayList<>());
+            data.setLikedList(new ArrayList<>());
+            tempBean.setData(data);
+            return tempBean;
+          }).map(contentsFlagResultBean -> loginResultBean);
       });
+
+
+//    return Single.fromObservable(Observable.combineLatest(login.toObservable(), flags.toObservable(), (loginResultBean, flagResultBean) -> loginResultBean))
+//      .doOnSuccess(loginResultBean -> {
+//        // 로그인 이후 fcm 토근 저장
+//        if (loginResultBean.isSuccess()) {
+//          FirebaseHelper.getInstance().init();
+//        }
+//      });
   }
 }

+ 26 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/LoginModuleParser.java

@@ -35,11 +35,11 @@ public class LoginModuleParser {
    * @return true: 정상적으로 파싱됨, false: API 통신은 성공(200)했지만 데이터 포맷 등의 이상으로 오류
    */
   public boolean parse(LoginResultBean loginResultBean) {
-    Log.i("APP# LoginModuleParser | parse", "|" + loginResultBean.toJson());
     try {
       if (null == loginResultBean) {
         return false;
       }
+      Log.i("APP# LoginModuleParser | parse", "|" + loginResultBean.toJson());
 
       // 로그인 API 성공하면 로그인 상태로 만들어줌.
       memberStatusManager.addMemberStatus(SuperModel.MEMBER_STATUS_BIT_LOGIN);
@@ -77,6 +77,31 @@ public class LoginModuleParser {
     }
   }
 
+  /**
+   * 파싱 이후 상태를 확인 한다.
+   *
+   * @param loginResultBean
+   * @return
+   */
+  public boolean verify(LoginResultBean loginResultBean) {
+    try {
+      if (null == loginResultBean) {
+        return false;
+      }
+      Log.i("APP# LoginModuleParser | verify", "|" + loginResultBean.toJson());
+
+      if (loginResultBean.isSuccess()) {
+        return true;
+      }
+      else {
+        return verify();
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return false;
+    }
+  }
+
   /**
    * 로그인 error 시 실행해준다.
    */

+ 3 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIRepository.java

@@ -412,6 +412,7 @@ public class LifeplusAPIRepository implements LifeplusAPI {
         return Single.fromCallable(() -> {
           ContentsFlagResultBean contentsFlagResultBean = new ContentsFlagResultBean();
           contentsFlagResultBean.setCode(LifeplusAPIBean.RETURN_SUCCESS);
+          contentsFlagResultBean.setReturnMessage("abnormal user.");
           ContentsFlagBean contentsFlagBean = new ContentsFlagBean();
           contentsFlagBean.setBookmarkedList(new ArrayList<>());
           contentsFlagBean.setLikedList(new ArrayList<>());
@@ -446,6 +447,7 @@ public class LifeplusAPIRepository implements LifeplusAPI {
         // 비정상 회원 - 0 리턴
         return Single.fromCallable(() -> {
           ShareCoinResultBean shareCoinResultBean = new ShareCoinResultBean();
+          shareCoinResultBean.setCode(LifeplusAPIBean.RETURN_SUCCESS);
           shareCoinResultBean.getData().setCoin("0");
 
           return shareCoinResultBean;
@@ -493,6 +495,7 @@ public class LifeplusAPIRepository implements LifeplusAPI {
         // 비정상 회원 - 0 리턴
         return Single.fromCallable(() -> {
           CoinInfoResultBean coinInfoResultBean = new CoinInfoResultBean();
+          coinInfoResultBean.setCode(LifeplusAPIBean.RETURN_SUCCESS);
           coinInfoResultBean.setCoin("0");
           coinInfoResultBean.setExpiringCoin("0");
           coinInfoResultBean.setData(new ArrayList<>());