package com.packt.madev.portfolio.model; import android.arch.persistence.room.Dao; import android.arch.persistence.room.Insert; import android.arch.persistence.room.Query; import android.arch.persistence.room.Update; import com.packt.madev.core.RxError; import java.util.List; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.inject.Singleton; import io.reactivex.Flowable; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.schedulers.Schedulers; @Singleton public class PortfolioRepository { RoomPortfolioRepository roomPortfolioRepository; @Inject public PortfolioRepository(RoomPortfolioRepository roomPortfolioRepository) { this.roomPortfolioRepository = roomPortfolioRepository; } public Observable<StockPortfolioItem> getPortfolioItems() { return Observable.just("1") .flatMap(s -> Observable.fromIterable(roomPortfolioRepository.getPortfolioItems())) .subscribeOn(Schedulers.io()); } public void save(StockPortfolioItem item) { Observable.just(item) .subscribeOn(Schedulers.io()) .subscribe(item1 -> { if (item1.getId() == null) { roomPortfolioRepository.insert(item1); } else { roomPortfolioRepository.update(item1); } }, RxError::handler); } @Dao public interface RoomPortfolioRepository { @Query("SELECT * FROM StockPortfolioItem") List<StockPortfolioItem> getPortfolioItems(); @Insert void insert(StockPortfolioItem item); @Update void update(StockPortfolioItem item); } }