/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAlex i ĠBre Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġtech . alex ib . y aba . data . db . dao Ċ Ċ import Ġcom . ben ash er 4 4 . uuid . Uuid Ċ import Ġcom . squareup . sql de light . runtime . coroutines . as Flow Ċ import Ġcom . squareup . sql de light . runtime . coroutines . map ToList Ċ import Ġcom . squareup . sql de light . runtime . coroutines . map ToOne OrNull Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġkotlinx . datetime . LocalDate Ċ import Ġtech . alex ib . y aba . data . db . Transaction Queries Ċ import Ġtech . alex ib . y aba . data . db . Y aba Db Ċ import Ġtech . alex ib . y aba . data . db . mapper . to Entity Ċ import Ġtech . alex ib . y aba . data . domain . dto . Transaction Dto Ċ import Ġtech . alex ib . y aba . model . Transaction Ċ import Ġtech . alex ib . y aba . model . Transaction Detail Ċ import Ġtech . alex ib . y aba . model . Transaction Type Ċ Ċ interface ĠTransaction Dao Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġinsert ( transactions : ĠList < Transaction Dto >) ĊĠĠĠ Ġsuspend Ġfun Ġdelete By AccountId ( accountId : ĠU uid ) ĊĠĠĠ Ġfun Ġselect Recent ( userId : ĠU uid ): ĠFlow < List < Transaction >> ĊĠĠĠ Ġfun Ġselect All Like Name ( userId : ĠU uid , Ġquery : ĠString ? Ġ= Ġnull ): ĠFlow < List < Transaction >> ĊĠĠĠ Ġfun Ġselect All ( userId : ĠU uid ): ĠFlow < List < Transaction >> ĊĠĠĠ Ġfun Ġselect ById ( id : ĠU uid ): ĠFlow < Transaction Detail ?> ĊĠĠĠ Ġfun Ġselect All By AccountId ( accountId : ĠU uid ): ĠFlow < List < Transaction >> ĊĠĠĠ Ġfun Ġs pending Categories By Date ( ĊĠĠĠĠĠĠĠ ĠuserId : ĠU uid , ĊĠĠĠĠĠĠĠ Ġstart : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġend : ĠLocalDate ĊĠĠĠ Ġ): ĠFlow < List < Pair < String , ĠDouble >>> ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete ById ( id : ĠU uid ) ĊĊĠĠĠ Ġclass ĠImp l ( ĊĠĠĠĠĠĠĠ Ġdatabase : ĠY aba Db , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbackground Dispatcher : ĠCor outine Dispatcher , ĊĠĠĠ Ġ) Ġ: ĠTransaction Dao Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġqueries : ĠTransaction Queries Ġ= Ġdatabase . transaction Queries ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert ( transactions : ĠList < Transaction Dto >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( background Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . insert ( it . to Entity ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete By AccountId ( accountId : ĠU uid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( background Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . delete By Ac cont Id ( accountId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġselect Recent ( userId : ĠU uid ): ĠFlow < List < Transaction >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . select Recent ( userId , Ġtransaction Mapper ). as Flow (). map ToList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( background Dispatcher ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġselect All ( userId : ĠU uid ): ĠFlow < List < Transaction >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . selectAll ( userId , Ġtransaction Mapper ). as Flow (). map ToList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( background Dispatcher ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġselect ById ( id : ĠU uid ): ĠFlow < Transaction Detail ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . select ById ( id , Ġtransaction Detail Mapper ). as Flow (). map ToOne OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( background Dispatcher ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġselect All By AccountId ( accountId : ĠU uid ): ĠFlow < List < Transaction >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . selectAll By Account ( accountId , Ġtransaction Mapper ). as Flow (). map ToList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( background Dispatcher ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete ById ( id : ĠU uid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( background Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . delete ById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġselect All Like Name ( userId : ĠU uid , Ġquery : ĠString ?): ĠFlow < List < Transaction >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . selectAll ByName ( userId , Ġquery Ġ?: Ġ"", Ġtransaction Mapper ). as Flow (). map ToList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( background Dispatcher ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġs pending Categories By Date ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId : ĠU uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend : ĠLocalDate ĊĠĠĠĠĠĠĠ Ġ): ĠFlow < List < Pair < String , ĠDouble >>> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueries . sp ending Categories By Date ( userId , Ġstart , Ġend ) Ġ{ Ġcategory , Ġamount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory !! Ġto Ġamount !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. as Flow (). map ToList (). flow On ( background Dispatcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtransaction Mapper : Ġ( ĊĠĠĠĠĠĠĠ ĠU uid , ĊĠĠĠĠĠĠĠ ĠU uid , ĊĠĠĠĠĠĠĠ ĠU uid , ĊĠĠĠĠĠĠĠ ĠU uid ?, ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠTransaction Type , ĊĠĠĠĠĠĠĠ ĠString , ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠLocalDate , ĊĠĠĠĠĠĠĠ ĠDouble , ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠBoolean ? ĊĠĠĠ Ġ) Ġ-> ĠTransaction ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠU uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount _ id : ĠU uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_: ĠU uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_: ĠU uid ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠTransaction Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant _ name : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiso _ currency _ code : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending : ĠBoolean ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaccountId Ġ= Ġaccount _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġcategory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub category Ġ= Ġsub category , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiso Currency Code Ġ= Ġiso _ currency _ code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Ġ= Ġpending Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant Name Ġ= Ġmerchant _ name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtransaction Detail Mapper : Ġ( ĊĠĠĠĠĠĠĠ ĠU uid , ĊĠĠĠĠĠĠĠ ĠU uid , ĊĠĠĠĠĠĠĠ ĠU uid , ĊĠĠĠĠĠĠĠ ĠU uid ?, ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠTransaction Type , ĊĠĠĠĠĠĠĠ ĠString , ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠLocalDate , ĊĠĠĠĠĠĠĠ ĠDouble , ĊĠĠĠĠĠĠĠ ĠBoolean ?, ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠString ?, ĊĠĠĠĠĠĠĠ ĠString ? ĊĠĠĠ Ġ) Ġ-> ĠTransaction Detail ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ{ Ġid : ĠU uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount _ id : ĠU uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_: ĠU uid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_: ĠU uid ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub category : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠTransaction Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiso _ currency _ code : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending : ĠBoolean ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant _ name : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Name : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstitution Name : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaccountId Ġ= Ġaccount _ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġcategory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub category Ġ= Ġsub category , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiso Currency Code Ġ= Ġiso _ currency _ code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Ġ= Ġpending , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant Name Ġ= Ġmerchant _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Name Ġ= Ġaccount Name Ġ?: Ġ" Unknown ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Mask Ġ= Ġmask Ġ?: Ġ" 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstitution Name Ġ= Ġinstitution Name Ġ?: Ġ" unknown " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ