Commit 8e272697 authored by Vladislav Bogdashkin's avatar Vladislav Bogdashkin 🎣

prefetch all estates on settings screen

parent 631c032e
...@@ -6,6 +6,7 @@ import com.biganto.visual.roompark.data.repository.api.room_park.IRoomParkApi ...@@ -6,6 +6,7 @@ import com.biganto.visual.roompark.data.repository.api.room_park.IRoomParkApi
import com.biganto.visual.roompark.data.repository.db.IDb import com.biganto.visual.roompark.data.repository.db.IDb
import com.biganto.visual.roompark.data.repository.db.requrey.model.DealEntity import com.biganto.visual.roompark.data.repository.db.requrey.model.DealEntity
import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import com.biganto.visual.roompark.data.repository.db.requrey.model.UserEntity
import com.biganto.visual.roompark.data.repository.mapper.fromRaw import com.biganto.visual.roompark.data.repository.mapper.fromRaw
import com.biganto.visual.roompark.data.repository.mapper.fromRawList import com.biganto.visual.roompark.data.repository.mapper.fromRawList
import com.biganto.visual.roompark.domain.contract.DealContract import com.biganto.visual.roompark.domain.contract.DealContract
...@@ -38,6 +39,27 @@ class EstateRepository @Inject constructor( ...@@ -38,6 +39,27 @@ class EstateRepository @Inject constructor(
Timber.d("Estate Repository Created $this") Timber.d("Estate Repository Created $this")
} }
override fun fetchFavorites(user:UserEntity): Observable<Iterable<EstateEntity>> =
api.getFavorites(user.authToken)
.doOnError(Timber::e)
.map { fromRawList(it, ::fromRaw) }
.doOnNext {
it.forEach { estate ->
estate.setFavorite(true)
estate.user = user
}
}
.flatMap(db::upsertEstates)
.doOnNext{ db.refreshUser(user) }
override fun fetchDeals(user:UserEntity): Observable<List<EstateEntity>> =
api.getDeals(TEST_DEAL_TOKEN)//api.getDeals(user.authToken)
.doOnError(Timber::e)
.map { List(it.size){index -> fromRaw(it[index],user)} }
.flatMap(db::upsertDeals)
.map { it.map {deal -> deal.estate as EstateEntity } }
.doOnNext { db.refreshUser(user) }
private val getFavoritesApi: Observable<List<EstateEntity>> = private val getFavoritesApi: Observable<List<EstateEntity>> =
local.recentUser() local.recentUser()
.flatMap { .flatMap {
......
...@@ -75,4 +75,6 @@ interface IDb { ...@@ -75,4 +75,6 @@ interface IDb {
fun refreshUser(userEntity: UserEntity): Observable<UserEntity> fun refreshUser(userEntity: UserEntity): Observable<UserEntity>
fun refreshEntities(entities: List<Persistable>): Observable<Iterable<Persistable>> fun refreshEntities(entities: List<Persistable>): Observable<Iterable<Persistable>>
fun refreshEstatesWithTours(): Completable fun refreshEstatesWithTours(): Completable
fun upsertEstates(entity: List<EstateEntity>): Observable<Iterable<EstateEntity>>?
fun upsertDeals(entity: List<DealEntity>): Observable<Iterable<DealEntity>>
} }
\ No newline at end of file
...@@ -90,6 +90,12 @@ class RequeryRepository @Inject constructor( ...@@ -90,6 +90,12 @@ class RequeryRepository @Inject constructor(
override fun <T : List<Persistable>> blockingUpsert(entity: T) = override fun <T : List<Persistable>> blockingUpsert(entity: T) =
store.upsert(entity).toObservable().blockingSubscribe() store.upsert(entity).toObservable().blockingSubscribe()
override fun upsertDeals(entity:List<DealEntity>): Observable<Iterable<DealEntity>> =
store.upsert(entity).toObservable()
override fun upsertEstates(entity:List<EstateEntity>): Observable<Iterable<EstateEntity>> =
store.upsert(entity).toObservable()
override fun upsertEstate(entity:EstateEntity) = override fun upsertEstate(entity:EstateEntity) =
store.upsert(entity).toObservable().blockingSubscribe() store.upsert(entity).toObservable().blockingSubscribe()
......
package com.biganto.visual.roompark.domain.contract package com.biganto.visual.roompark.domain.contract
import com.biganto.visual.roompark.data.repository.db.requrey.model.DealEntity
import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import com.biganto.visual.roompark.data.repository.db.requrey.model.UserEntity
import com.biganto.visual.roompark.domain.model.DealModel import com.biganto.visual.roompark.domain.model.DealModel
import com.biganto.visual.roompark.domain.model.EstateModel import com.biganto.visual.roompark.domain.model.EstateModel
import io.reactivex.Completable import io.reactivex.Completable
...@@ -17,4 +20,6 @@ interface DealContract{ ...@@ -17,4 +20,6 @@ interface DealContract{
fun getDeals(): Observable<List<DealModel>> fun getDeals(): Observable<List<DealModel>>
fun fetchEstate(building: Int, number: Int): Observable<EstateModel> fun fetchEstate(building: Int, number: Int): Observable<EstateModel>
fun setDealRead(dealId: String): Completable fun setDealRead(dealId: String): Completable
fun fetchDeals(user: UserEntity): Observable<List<EstateEntity>>
fun fetchFavorites(user: UserEntity): Observable<Iterable<EstateEntity>>
} }
\ No newline at end of file
...@@ -2,9 +2,12 @@ package com.biganto.visual.roompark.domain.use_case ...@@ -2,9 +2,12 @@ package com.biganto.visual.roompark.domain.use_case
import com.biganto.visual.roompark.data.data_provider.featuresVariants import com.biganto.visual.roompark.data.data_provider.featuresVariants
import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity import com.biganto.visual.roompark.data.repository.db.requrey.model.EstateEntity
import com.biganto.visual.roompark.data.repository.db.requrey.model.UserEntity
import com.biganto.visual.roompark.domain.contract.AuthContract import com.biganto.visual.roompark.domain.contract.AuthContract
import com.biganto.visual.roompark.domain.contract.DealContract
import com.biganto.visual.roompark.domain.contract.FlatPlanContract import com.biganto.visual.roompark.domain.contract.FlatPlanContract
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.rxkotlin.Observables
import javax.inject.Inject import javax.inject.Inject
/** /**
...@@ -13,20 +16,30 @@ import javax.inject.Inject ...@@ -13,20 +16,30 @@ import javax.inject.Inject
class PlanTypesUseCase @Inject constructor( class PlanTypesUseCase @Inject constructor(
private val planContract: FlatPlanContract, private val planContract: FlatPlanContract,
private val auth:AuthContract private val auth:AuthContract,
private val dealContract: DealContract
) { ) {
private fun fetchUserEstates(user:UserEntity): Observable<List<EstateEntity>> =
Observables.zip(dealContract.fetchDeals(user),dealContract.fetchFavorites(user))
{t1,t2 -> t1+t2}
private val fetchAllPlanTypes = private val fetchAllPlanTypes =
auth.currentUser() auth.currentUser()
.map { user -> .flatMap {user ->
val list = fetchUserEstates(user)
user.deals?.map { it.estate as EstateEntity }?.toMutableList() .onErrorReturn { arrayListOf() }
?: mutableListOf() .map { apiList ->
list.addAll(user.estates?.map { it as EstateEntity } ?: arrayListOf()) val list =
list user.deals?.map { it.estate as EstateEntity }?.toMutableList()
?: mutableListOf()
list.addAll(user.estates?.map { it as EstateEntity } ?: arrayListOf())
(list+apiList).distinctBy { it.id }
}
} }
fun fetchNotDownloadedPlansSizes(): Observable<Int> = fun fetchNotDownloadedPlansSizes(): Observable<Int> =
fetchAllPlanTypes fetchAllPlanTypes
.flatMapIterable { it } .flatMapIterable { it }
......
...@@ -18,6 +18,7 @@ import javax.inject.Inject ...@@ -18,6 +18,7 @@ import javax.inject.Inject
* Created by Vladislav Bogdashkin on 30.09.2019. * Created by Vladislav Bogdashkin on 30.09.2019.
*/ */
private const val TYPICAL_PLAN_SIZE = (1.2f*1024L*1024L).toLong()
class SettingsScreenPresenter @Inject constructor( class SettingsScreenPresenter @Inject constructor(
private val interactor: SettingsInteractor, private val interactor: SettingsInteractor,
...@@ -42,7 +43,7 @@ class SettingsScreenPresenter @Inject constructor( ...@@ -42,7 +43,7 @@ class SettingsScreenPresenter @Inject constructor(
.map { SettingsScreenViewState.OnSizePrefetch(it) } .map { SettingsScreenViewState.OnSizePrefetch(it) }
val fetchPlansSize = interactor.fetchPlanTypesSizes() val fetchPlansSize = interactor.fetchPlanTypesSizes()
.map { it*1024L*1024L } .map { it* TYPICAL_PLAN_SIZE }
.map { SettingsScreenViewState.OnPlanTypesPrefetch(it) } .map { SettingsScreenViewState.OnPlanTypesPrefetch(it) }
val onDownloadTours = intent(SettingsScreen::downloadAllTours) val onDownloadTours = intent(SettingsScreen::downloadAllTours)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment