package Ġsample . books . data Ċ Ċ import Ġsample . base . domain . Rx Schedulers Ċ import Ġsample . books . data . database . Book Dao Ċ import Ġsample . books . data . database . Book Entity Ċ import Ġsample . books . data . network . Books Api Ċ import Ġsample . books . domain . Book Ċ import Ġsample . books . domain . Books Repository Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Flow able Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof Ġ[ Books Repository ] Ġthat Ġmaintains Ġbooks . Ċ Ġ*/ Ċ class ĠBooks Repository Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġbooks Api : ĠBooks Api , ĊĠĠĠ Ġprivate Ġval Ġbook Dao : ĠBook Dao , ĊĠĠĠ Ġprivate Ġval Ġs chedulers : ĠRx Schedulers Ċ ) Ġ: ĠBooks Repository Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Books (): ĠFlow able < List < Book >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbook Dao . getAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . database ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: to Books ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Books (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbooks Api . getAll Books () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . io ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Dao . insert ( to Book Entities ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . database ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Books ( entities : ĠList < Book Entity >): ĠList < Book > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentities . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBook ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġit . author , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Date Ġ= Ġit . publish Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover ImageUrl Ġ= Ġit . cover ImageUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Book Entities ( books : ĠList < Book >): ĠList < Book Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbooks . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBook Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġit . author , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Date Ġ= Ġit . publish Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcover ImageUrl Ġ= Ġit . cover ImageUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ