package Ġcom . dd ona . bank ing . local . source Ċ Ċ import Ġcom . dd ona . bank ing . data . model . Transaction Data Ċ import Ġcom . dd ona . bank ing . data . model . UserInfo Data Ċ import Ġcom . dd ona . bank ing . data . repository . Local DataSource Ċ import Ġcom . dd ona . bank ing . local . database . Transaction DAO Ċ import Ġcom . dd ona . bank ing . local . database . UserInfo DAO Ċ import Ġcom . dd ona . bank ing . local . mapper . Transaction Data Local Mapper Ċ import Ġcom . dd ona . bank ing . local . mapper . UserInfo Data Local Mapper Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠLocal DataSource Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠuserInfo Mapper : ĠUserInfo Data Local Mapper , ĊĠĠĠ Ġprivate Ġval Ġtransaction Mapper : ĠTransaction Data Local Mapper , ĊĠĠĠ Ġprivate Ġval ĠuserInfo DAO : ĠUserInfo DAO , ĊĠĠĠ Ġprivate Ġval Ġtransaction DAO : ĠTransaction DAO Ċ ) Ġ: ĠLocal DataSource Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ LIMIT Ġ= Ġ 4 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ CRED IT Ġ= Ġ" credit " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ DE BIT Ġ= Ġ" debit " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser Info ( identifier : ĠString ): ĠObservable < UserInfo Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠuserInfo DAO . getUser Info ( identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserInfo Mapper . from ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave UserInfo ( userInfo Data : ĠUserInfo Data ) Ġ{ ĊĠĠĠĠĠĠĠ ĠuserInfo DAO . add UserInfo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserInfo Mapper . to ( userInfo Data ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser Transactions ( user Identifier : ĠString , Ġlimit : ĠInt ): ĠObservable < List < Transaction Data >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtransaction DAO . getUser Transactions ( limit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlocal Transactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Transactions . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Mapper . from ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave User Transactions ( user Identifier : ĠString , Ġtransactions : ĠList < Transaction Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction DAO . add Transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Mapper . to ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Transaction ( transaction Id : ĠString ): ĠObservable < Transaction Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtransaction DAO . getTransaction ById ( transaction Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Mapper . from ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Filtered Transactions ( ĊĠĠĠĠĠĠĠ Ġuser Identifier : ĠString , ĊĠĠĠĠĠĠĠ Ġcredit : ĠBoolean ?, ĊĠĠĠĠĠĠĠ Ġde bit : ĠBoolean ?, ĊĠĠĠĠĠĠĠ Ġflag ged : ĠBoolean ? ĊĠĠĠ Ġ): ĠObservable < List < Transaction Data >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtransaction DAO . getUser Transactions ( DEFAULT _ LIMIT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlocal Transactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Transactions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġif Ġ( flag ged Ġ== Ġnull Ġ|| Ġ! flag ged ) Ġtrue Ġelse Ġ( it . flag ged Ġ== Ġflag ged ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġif Ġ( credit Ġ== Ġnull Ġ|| Ġ! credit ) Ġtrue Ġelse Ġ( it . type Ġ== ĠTYPE _ CRED IT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġif Ġ( debit Ġ== Ġnull Ġ|| Ġ! debit ) Ġtrue Ġelse Ġ( it . type Ġ== ĠTYPE _ DE BIT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġfiltered Transactions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Transactions . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Mapper . from ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Transaction ( transaction : ĠTransaction Data ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtransaction DAO . update Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Mapper . to ( transaction ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ