Advertisement
vmeansdev

CitiesRepo

Oct 26th, 2019
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.47 KB | None | 0 0
  1. class CitiesRepository @Inject constructor(
  2.         private val cityDao: CityDao,
  3.         private val listsService: ListsService,
  4.         private val schedulerProvider: SchedulerProvider
  5. ): ICitiesRepository {
  6.  
  7.     override fun cities(): Single<List<City>> {
  8.         return citiesFromDB()
  9.                 .flatMap { cities ->
  10.                     if (cities.isEmpty()){
  11.                         citiesFromAPI()
  12.                     } else {
  13.                         Single.just(cities)
  14.                     }
  15.                 }
  16.     }
  17.  
  18.  
  19.     private fun citiesFromDB(): Single<List<City>> {
  20.         return cityDao.allCities()
  21.                 .subscribeOn(schedulerProvider.computation())
  22.                 .doOnSuccess { Logger.i("Received ${it.size} cities from DB") }
  23.     }
  24.  
  25.     private fun citiesFromAPI(): Single<List<City>> {
  26.         val mapList: (List<City>) -> List<City> = { cities ->
  27.                 cities
  28.                 .asSequence()
  29.                 .map { it.apply { name = it.name.trim() } }
  30.                 .sortedBy { it.name }
  31.                 .toList()
  32.         }
  33.  
  34.         return listsService.cities()
  35.             .validateResult()
  36.             .mapResponseData()
  37.             .map(mapList)
  38.             .doOnSuccess { Logger.i("Received cities list from API: $it") }
  39.             .doOnSuccess(this::saveCities)
  40.     }
  41.  
  42.     private fun saveCities(cities: List<City>) {
  43.         cityDao.insertCities(cities)
  44.         repoStoredLog(cities, "cities")
  45.     }
  46.  
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement