Parcourir la source

Refactoring: added interactor for user screen

Vadik Sirekanyan il y a 7 ans
Parent
commit
8a33de308b

+ 11 - 0
app/src/main/java/me/vadik/knigopis/dependency/modules.kt

@@ -14,8 +14,13 @@ import me.vadik.knigopis.common.ResourceProviderImpl
 import me.vadik.knigopis.dialog.BottomSheetDialogFactory
 import me.vadik.knigopis.dialog.DialogFactory
 import me.vadik.knigopis.model.ImageThumbnail
+import me.vadik.knigopis.user.UserInteractor
+import me.vadik.knigopis.user.UserInteractorImpl
+import me.vadik.knigopis.user.UserRepository
+import me.vadik.knigopis.user.UserRepositoryImpl
 import okhttp3.OkHttpClient
 import okhttp3.logging.HttpLoggingInterceptor
+import org.koin.dsl.context.Context
 import org.koin.dsl.module.applicationContext
 import retrofit2.Retrofit
 import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
@@ -34,6 +39,12 @@ val appModule = applicationContext {
     bean { ConfigurationImpl(get()) as Configuration }
     bean { ResourceProviderImpl(get()) as ResourceProvider }
     factory { BottomSheetDialogFactory(it["activity"]) as DialogFactory }
+    userModule()
+}
+
+private fun Context.userModule() {
+    bean { UserInteractorImpl(get(), get(), get()) as UserInteractor }
+    bean { UserRepositoryImpl() as UserRepository }
 }
 
 private fun createMainEndpoint() =

+ 9 - 15
app/src/main/java/me/vadik/knigopis/user/UserActivity.kt

@@ -13,8 +13,6 @@ import kotlinx.android.synthetic.main.user_activity.*
 import me.vadik.knigopis.*
 import me.vadik.knigopis.adapters.books.BooksAdapter
 import me.vadik.knigopis.adapters.books.UserBook
-import me.vadik.knigopis.api.Endpoint
-import me.vadik.knigopis.auth.KAuth
 import me.vadik.knigopis.common.setCircleImage
 import me.vadik.knigopis.dialog.DialogFactory
 import me.vadik.knigopis.utils.systemClipboardManager
@@ -32,8 +30,7 @@ fun Context.createUserIntent(id: String, name: String, avatar: String?): Intent
 
 class UserActivity : AppCompatActivity() {
 
-    private val api by inject<Endpoint>()
-    private val auth by inject<KAuth>()
+    private val interactor by inject<UserInteractor>()
     private val dialogs by inject<DialogFactory> { mapOf("activity" to this) }
     private val userId by lazy { intent.getStringExtra(EXTRA_USER_ID) }
     private val books = mutableListOf<UserBook>()
@@ -49,8 +46,7 @@ class UserActivity : AppCompatActivity() {
         setSupportActionBar(toolbar)
         fab.setOnClickListener { view ->
             fab.hideScale()
-            api.createSubscription(userId, auth.getAccessToken())
-                .io2main()
+            interactor.subscribe(userId)
                 .subscribe({
                     view.snackbar(R.string.users_info_subscribed)
                 }, {
@@ -69,7 +65,7 @@ class UserActivity : AppCompatActivity() {
 
     override fun onStart() {
         super.onStart()
-        api.getUserBooks(userId).io2main()
+        interactor.getBooks(userId)
             .doOnSubscribe {
                 userBooksProgressBar.show()
                 userBooksErrorPlaceholder.hide()
@@ -85,13 +81,12 @@ class UserActivity : AppCompatActivity() {
             }, {
                 logError("Cannot load user books", it)
             })
-        api.getSubscriptions(auth.getAccessToken())
-            .io2main()
-            .subscribe({ subscriptions ->
-                if (subscriptions.none { it.subUser.id == userId }) {
-                    fab.showScale()
-                } else {
+        interactor.isSubscribed(userId)
+            .subscribe({ isSubscribed ->
+                if (isSubscribed) {
                     unsubscribeOption.isVisible = true
+                } else {
+                    fab.showScale()
                 }
             }, {
                 logError("Cannot update subscription", it)
@@ -113,8 +108,7 @@ class UserActivity : AppCompatActivity() {
                 true
             }
             R.id.option_unsubscribe -> {
-                api.deleteSubscription(userId, auth.getAccessToken())
-                    .io2main()
+                interactor.unsubscribe(userId)
                     .subscribe({}, {
                         logError("Cannot unsubscribe", it)
                         toast(R.string.user_error_unsubscribe)

+ 47 - 0
app/src/main/java/me/vadik/knigopis/user/UserInteractor.kt

@@ -0,0 +1,47 @@
+package me.vadik.knigopis.user
+
+import io.reactivex.Completable
+import io.reactivex.Single
+import me.vadik.knigopis.adapters.books.UserBook
+import me.vadik.knigopis.api.Endpoint
+import me.vadik.knigopis.auth.KAuth
+import me.vadik.knigopis.io2main
+
+interface UserInteractor {
+
+    fun subscribe(userId: String): Completable
+
+    fun unsubscribe(userId: String): Completable
+
+    fun isSubscribed(userId: String): Single<Boolean>
+
+    fun getBooks(userId: String): Single<List<UserBook>>
+
+}
+
+class UserInteractorImpl(
+    private val auth: KAuth,
+    private val api: Endpoint,
+    private val userRepository: UserRepository
+) : UserInteractor {
+
+    override fun subscribe(userId: String) =
+        api.createSubscription(userId, auth.getAccessToken())
+            .toCompletable()
+            .io2main()
+
+    override fun unsubscribe(userId: String) =
+        api.deleteSubscription(userId, auth.getAccessToken())
+            .toCompletable()
+            .io2main()
+
+    override fun isSubscribed(userId: String) =
+        api.getSubscriptions(auth.getAccessToken())
+            .map { subscriptions -> subscriptions.any { it.subUser.id == userId } }
+            .io2main()
+
+    override fun getBooks(userId: String) =
+        api.getUserBooks(userId)
+            .io2main()
+
+}

+ 9 - 0
app/src/main/java/me/vadik/knigopis/user/UserRepository.kt

@@ -0,0 +1,9 @@
+package me.vadik.knigopis.user
+
+interface UserRepository {
+
+}
+
+class UserRepositoryImpl : UserRepository {
+
+}