package Ġru . ite co . fm h android . repository . news Repository čĊč Ċ import Ġkotlinx . coroutines . Coroutine Scope č Ċ import Ġkotlinx . coroutines . Dispatch ers č Ċ import Ġkotlinx . coroutines . flow . Flow č Ċ import Ġkotlinx . coroutines . flow . flow On č Ċ import Ġkotlinx . coroutines . flow . map č Ċ import Ġru . ite co . fm h android . api . News Api č Ċ import Ġru . ite co . fm h android . dao . News Category Dao č Ċ import Ġru . ite co . fm h android . dao . News Dao č Ċ import Ġru . ite co . fm h android . dto . News č Ċ import Ġru . ite co . fm h android . dto . New sWith Category č Ċ import Ġru . ite co . fm h android . entity . to Entity č Ċ import Ġru . ite co . fm h android . entity . to News Category Dto č Ċ import Ġru . ite co . fm h android . entity . to News Category Entity č Ċ import Ġru . ite co . fm h android . utils . Utils č Ċ import Ġjavax . inject . Inject č Ċ import Ġjavax . inject . Singleton čĊč Ċ @ Singleton č Ċ class ĠNews Repository Impl Ġ@ Inject Ġconstructor ( čĊĠĠĠ Ġprivate Ġval Ġnews Dao : ĠNews Dao , čĊĠĠĠ Ġprivate Ġval Ġnews Category Dao : ĠNews Category Dao , čĊĠĠĠ Ġprivate Ġval Ġnews Api : ĠNews Api č Ċ ) Ġ: ĠNews Repository Ġ{ čĊĠĠĠ Ġoverride Ġfun ĠgetAll News ( čĊĠĠĠĠĠĠĠ Ġcoroutine Scope : ĠCor outine Scope , čĊĠĠĠĠĠĠĠ Ġpublish Enabled : ĠBoolean ?, čĊĠĠĠĠĠĠĠ Ġpublish Date Before : ĠLong ?, čĊĠĠĠĠĠĠĠ Ġnews CategoryId : ĠInt ?, čĊĠĠĠĠĠĠĠ Ġdate Start : ĠLong ?, čĊĠĠĠĠĠĠĠ Ġdate End : ĠLong ?, čĊĠĠĠĠĠĠĠ Ġstatus : ĠBoolean ? čĊĠĠĠ Ġ): ĠFlow < List < New sWith Category >> Ġ= Ġnews Dao . getAll News ( čĊĠĠĠĠĠĠĠ Ġpublish Enabled Ġ= Ġpublish Enabled , čĊĠĠĠĠĠĠĠ Ġpublish Date Before Ġ= Ġpublish Date Before , čĊĠĠĠĠĠĠĠ Ġnews CategoryId Ġ= Ġnews CategoryId , čĊĠĠĠĠĠĠĠ Ġdate Start Ġ= Ġdate Start , čĊĠĠĠĠĠĠĠ Ġdate End Ġ= Ġdate End , čĊĠĠĠĠĠĠĠ Ġstatus Ġ= Ġstatus čĊĠĠĠ Ġ). flow On ( Dispatch ers . Default ) čĊčĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġchange Is Open ( news Item : ĠNews ) Ġ{ čĊĠĠĠĠĠĠĠ Ġnews Dao . insert ( news Item . to Entity ()) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrefresh News () Ġ= ĠUtils . make Request ( čĊĠĠĠĠĠĠĠ Ġrequest Ġ= Ġ{ Ġnews Api . getAll News () Ġ}, čĊĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġbody Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Id Ġ= Ġbody čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . id Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Id Ġ= Ġnews Dao . getAll News List () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . news Item . id Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Id . removeAll ( api Id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Dao . remove News Items ById List ( database Id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Dao . insert ( body . to Entity ()) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ) čĊčĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġmodification Of Existing News ( news Item : ĠNews ): ĠNews Ġ= čĊĠĠĠĠĠĠĠ ĠUtils . make Request ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġ{ Ġnews Api . edit News Item ( news Item ) Ġ}, čĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġbody Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Dao . insert ( body . to Entity ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate News ( news Item : ĠNews ): ĠNews Ġ= čĊĠĠĠĠĠĠĠ ĠUtils . make Request ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġ{ Ġnews Api . save News Item ( news Item ) Ġ}, čĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġbody Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Dao . insert ( body . to Entity ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġremove News Item ById ( id : ĠInt ) Ġ= čĊĠĠĠĠĠĠĠ ĠUtils . make Request ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġ{ Ġnews Api . remove News Item ById ( id ) Ġ}, čĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Dao . remove News Item ById ( id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠ Ġoverride Ġfun ĠgetAll News Categories (): ĠFlow < List < News . Category >> Ġ= čĊĠĠĠĠĠĠĠ Ġnews Category Dao . getAll News Categories (). map Ġ{ Ġit . to News Category Dto () Ġ} čĊčĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave News Categories ( list News Categories : ĠList < News . Category >) Ġ= čĊĠĠĠĠĠĠĠ Ġnews Category Dao . insert ( list News Categories . to News Category Entity ()) č Ċ }