Есть репозиторий, где инжектится
datasource. У этого репозитория есть два метода -
loadLocal и
loadRemote.
Изначально вызывается
loadLocal и в случае того, если в локальной базе данных нет никаких записей, то вызываем метод
loadRemote, где данные уже получаем от сервера в виде
Single<List<Item>>
. Затем мы должны вернуть уже
Flowable<List<Item>>
из локальной БД после того как мы уже добавили определенные данные от сервера. Каким образом грамотно выполнять поочередность, чтобы после того как получили
Single<List<Item>>
от сервера из него вытянуть все необходимые данные, закинуть в БД и уже вернуть список из самой БД?
class ItemRepository @Inject constructor(private val dataSource: DataSource) {
fun loadLocal(forceRemote: Boolean): Flowable<List<Item>> {
return if (forceRemote) {
loadRemote()
} else {
dataSource.loadLocal(false).filter { !it.isEmpty() }.switchIfEmpty(loadRemote())
}
}
private fun loadRemote(): Flowable<List<Item>> {
dataSource.loadRemote(false).map { list ->
list.map { item ->
/*code*/
/*Вытягиваем данные из объекта и закидываем в разные таблицы БД*/
with(dataSource) {
addItem(item)
addDetails(listDetails)
addItemDetails(listItemDetails)
}
}
}
return dataSource.loadLocal(false)
}
}