package Ġcom . sp ir acle software . android sample . domain . inter actor Ċ Ċ import Ġcom . sp ir acle software . android sample . domain . Local DataSource Ċ import Ġcom . sp ir acle software . android sample . domain . Remote DataSource Ċ import Ġcom . sp ir acle software . android sample . domain . core . Result Ċ import Ġcom . sp ir acle software . android sample . domain . core . map On Success Ċ import Ġcom . sp ir acle software . android sample . domain . entity . Transaction Ċ import Ġcom . sp ir acle software . android sample . domain . entity . Transaction Category Ċ import Ġcom . sp ir acle software . android sample . domain . entity . Transaction Id Ċ import Ġcom . sp ir acle software . android sample . domain . entity . Transactions Filter Ċ import Ġkotlinx . coroutines . flow .* Ċ Ċ class ĠTransactions Interactor ( ĊĠĠĠ Ġprivate Ġval Ġremote DataSource : ĠRemote DataSource , ĊĠĠĠ Ġprivate Ġval Ġlocal DataSource : ĠLocal DataSource Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġremote DataSource Result Ġ= ĠMutable State Flow < Result < List < Transaction >> >( Result . Loading ) ĊĊĠĠĠ Ġfun Ġflow Transactions ( filter Flow : ĠFlow < Transactions Filter >) Ġ= ĊĠĠĠĠĠĠĠ Ġflow Transactions (). combine ( filter Flow ) Ġ{ Ġresult , Ġfilter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . map On Success Ġ{ Ġtransactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . Success ( filter . get Filtered ( transactions )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġflow Transactions (): ĠFlow < Result < List < Transaction >>> Ġ= ĊĠĠĠĠĠĠĠ Ġlocal DataSource . flow Transactions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcombine Ġerror Ġand Ġloading Ġstate Ġfrom Ġremote DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith Ġdata Ġfrom Ġlocal DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine ( remote DataSource Result ) Ġ{ Ġlocal Data , Ġremote Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( remote Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> ĠResult . Success ( local Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġremote Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Loading Ġ-> Ġremote Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġrefresh Transactions () Ġ{ ĊĠĠĠĠĠĠĠ Ġremote DataSource . fetch Transactions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġlocal DataSource . save Transactions ( result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġlocal DataSource . clear Transactions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġresult Ġ-> Ġremote DataSource Result . value Ġ= Ġresult Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Transaction ById ( id : ĠTransaction Id ): ĠTransaction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlocal DataSource . getTransaction ById ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġflow Transaction ById ( id : ĠTransaction Id ) Ġ= ĊĠĠĠĠĠĠĠ Ġlocal DataSource . flow Transaction ById ( id ) ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate Transaction Note ( id : ĠTransaction Id , Ġnote : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġremote DataSource . update Transaction Note ( id . value , Ġnote ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . update Transaction ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate Transaction Category ( id : ĠTransaction Id , Ġcategory : ĠTransaction Category ) Ġ= ĊĠĠĠĠĠĠĠ Ġremote DataSource . update Transaction Category ( id . value , Ġcategory . name ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . update Transaction ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġupload Attachment ( id : ĠTransaction Id , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremote DataSource . upload Attachment ( id . value , Ġuri ). also Ġ{ Ġattachment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . update Transaction ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( attachments Ġ= Ġit . attachments . plus ( attachment )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġremove Attachment ( id : ĠTransaction Id , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremote DataSource . remove Attachment ( id . value , Ġuri ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . update Transaction ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( attachments Ġ= Ġit . attachments . minus ( uri )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Categories (): ĠList < Transaction Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTransaction Category . values (). toList () ĊĠĠĠ Ġ} Ċ Ċ } Ċ