mirror of
https://github.com/imcarlost/Acronyms.git
synced 2026-04-10 02:46:53 -04:00
Add: viewmodel
This commit is contained in:
@@ -11,6 +11,6 @@ class AcronymsDataRepository(
|
||||
) : AcronymsRepository {
|
||||
|
||||
override fun getAcronymDefinition(acronym: String): Single<ShortformModel> {
|
||||
return remoteDatasource.getAcronymDefinition(acronym).map { it.single()?.toShortformModel() }
|
||||
return remoteDatasource.getAcronymDefinition(acronym).map { it.single().toShortformModel() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import dev.carlos.shortform.data.cloud.retrofit.AcronymsRemoteDatasource
|
||||
import dev.carlos.shortform.data.cloud.retrofit.AcronymsService
|
||||
import dev.carlos.shortform.domain.AcronymsRepository
|
||||
import dev.carlos.shortform.domain.GetAcronymDefinition
|
||||
import dev.carlos.shortform.viewmodels.AcronymsViewmodel
|
||||
import org.koin.androidx.viewmodel.dsl.viewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
val acronymsModule = module {
|
||||
@@ -22,4 +24,6 @@ val acronymsModule = module {
|
||||
factory<AcronymsRepository> { AcronymsDataRepository(get()) }
|
||||
|
||||
factory { GetAcronymDefinition(get(), get()) }
|
||||
|
||||
viewModel { AcronymsViewmodel(get()) }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package dev.carlos.shortform.viewmodels
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import dev.carlos.core.domain.network.RequestError
|
||||
import dev.carlos.core.domain.network.RequestState
|
||||
import dev.carlos.core.viewmodel.RxViewModel
|
||||
import dev.carlos.shortform.data.models.ShortformModel
|
||||
import dev.carlos.shortform.domain.GetAcronymDefinition
|
||||
import retrofit2.HttpException
|
||||
import java.net.UnknownHostException
|
||||
|
||||
class AcronymsViewmodel(
|
||||
private val GetAcronymsDefinition: GetAcronymDefinition
|
||||
) : RxViewModel() {
|
||||
|
||||
val acronymDefinition = MutableLiveData<RequestState>()
|
||||
|
||||
fun fetchAcronymDefinition(acronym: String) {
|
||||
val disposable = GetAcronymsDefinition.getAcronymDefinition(acronym)
|
||||
.doOnSubscribe { acronymDefinition.postValue(RequestState.Loading) }
|
||||
.subscribe(::handleSuccess, ::handleError)
|
||||
compositeDisposable.add(disposable)
|
||||
}
|
||||
|
||||
private fun handleSuccess(definition: ShortformModel) {
|
||||
acronymDefinition.postValue(RequestState.Success(definition))
|
||||
}
|
||||
|
||||
private fun handleError(exception: Throwable) {
|
||||
when (exception) {
|
||||
is NoSuchElementException -> acronymDefinition.postValue(RequestState.Empty)
|
||||
is UnknownHostException -> acronymDefinition.postValue(RequestState.Error(RequestError.NO_NETWORK))
|
||||
is HttpException -> acronymDefinition.postValue(RequestState.Error(RequestError.BAD_RESPONSE))
|
||||
else -> acronymDefinition.postValue(RequestState.Error(RequestError.UNKNOWN_PROBLEM))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user