Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class CitiesRepository @Inject constructor(
- private val cityDao: CityDao,
- private val listsService: ListsService,
- private val schedulerProvider: SchedulerProvider
- ): ICitiesRepository {
- override fun cities(): Single<List<City>> {
- return citiesFromDB()
- .flatMap { cities ->
- if (cities.isEmpty()){
- citiesFromAPI()
- } else {
- Single.just(cities)
- }
- }
- }
- private fun citiesFromDB(): Single<List<City>> {
- return cityDao.allCities()
- .subscribeOn(schedulerProvider.computation())
- .doOnSuccess { Logger.i("Received ${it.size} cities from DB") }
- }
- private fun citiesFromAPI(): Single<List<City>> {
- val mapList: (List<City>) -> List<City> = { cities ->
- cities
- .asSequence()
- .map { it.apply { name = it.name.trim() } }
- .sortedBy { it.name }
- .toList()
- }
- return listsService.cities()
- .validateResult()
- .mapResponseData()
- .map(mapList)
- .doOnSuccess { Logger.i("Received cities list from API: $it") }
- .doOnSuccess(this::saveCities)
- }
- private fun saveCities(cities: List<City>) {
- cityDao.insertCities(cities)
- repoStoredLog(cities, "cities")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement