Обьеденить в один метод запрос с серва и запись в базу данных

У меня есть запрос из серва и из базы данных, суть в том, что бы при кадом запуске шла загрузка с базы данных, и с сервера который обновляет эту базу с помощью RxJava 2

Код который я придумал, но работает немножко не так

fun loadMovie(id: Int): Single<AboutMovie> = database.getMovie(id = id)
        .onErrorResumeNext( aboutMovieService.getMovie(movieId = id) )
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())

Ответы (1 шт):

Автор решения: Alex_Skvortsov

Я уже давно не работал с Rx, да и никогда не был в нем силен, поэтому качество кода оставляет желать лучшего. Тем не менее, задачу он решать должен.

Код писался без IDE, так что за опечатки не пинать)

fun loadMovie(id: Int): Single<AboutMovie> {
    return aboutMovieService.getMovie(movieId = id) // Получаем данные от сервера
        .flatMap { movie ->
            database.putMovie(movie) // Сохраняем в БД
            // Если putMovie не возвращает ничего, то строка, которая ниже, нужна
            // Если putMovie возвращает Single<Movie>, то строка ниже НЕ нужна
            // Если putMovie возвращает что-то другое, то пишите в комменты, что
            Single.just(movie) // Отдаем дальше инфу, полученную от сервера
        }
        .onErrorResumeNext( database.getMovie(id = id) ) // в случае ошибки на одном из прошлых шагов берем данные из БД
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
}
→ Ссылка