package Ġser g . ch up rin . fin ances . feature . money account . domain . use case Ċ Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . Id Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . category . query . Categories Query Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . money account . Money Account Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . Transaction Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . Transaction Type Ċ import Ġser g . ch up rin . fin ances . core . api . domain . repository . Category Repository Ċ import Ġser g . ch up rin . fin ances . core . api . domain . repository . Money Account Repository Ċ import Ġser g . ch up rin . fin ances . core . api . domain . repository . Transaction Repository Ċ import Ġser g . ch up rin . fin ances . core . api . domain . repository . UserRepository Ċ import Ġser g . ch up rin . fin ances . feature . money account . domain . model . Money Account Creation Params Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . time . LocalDateTime Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠSer ge y ĠCh up rin Ġon Ġ 1 4 . 1 1 . 2 0 2 0 . Ċ Ġ*/ Ċ class ĠCreate Money Account UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġcategory Repository : ĠCategory Repository , ĊĠĠĠ Ġprivate Ġval Ġtransaction Repository : ĠTransaction Repository , ĊĠĠĠ Ġprivate Ġval Ġmoney Account Repository : ĠMoney Account Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġexecute ( params : ĠMoney Account Creation Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( currency , Ġaccount Name , Ġinitial Balance ) Ġ= Ġparams ĊĊĠĠĠĠĠĠĠ Ġval Ġmoney AccountId Ġ= ĠId . createNew () ĊĠĠĠĠĠĠĠ Ġval Ġcurrency Code Ġ= Ġcurrency . currency Code ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġuser Repository . getCurrent User (). id ĊĊĠĠĠĠĠĠĠ Ġcreate Money Account ( userId , Ġaccount Name , Ġmoney AccountId , Ġcurrency Code ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( initial Balance Ġ!= ĠBigDecimal . ZERO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Balance Transaction ( userId , Ġmoney AccountId , Ġinitial Balance , Ġcurrency Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcreate Pre defined Categories IfNot Exists ( userId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Money Account ( ĊĠĠĠĠĠĠĠ ĠuserId : ĠId , ĊĠĠĠĠĠĠĠ Ġaccount Name : ĠString , ĊĠĠĠĠĠĠĠ Ġmoney AccountId : ĠId , ĊĠĠĠĠĠĠĠ Ġcurrency Code : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmoney Account Ġ= ĠMoney Account ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġaccount Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmoney AccountId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Code Ġ= Ġcurrency Code ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmoney Account Repository . create OrUpdate Account ( money Account ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Balance Transaction ( ĊĠĠĠĠĠĠĠ ĠuserId : ĠId , ĊĠĠĠĠĠĠĠ Ġmoney AccountId : ĠId , ĊĠĠĠĠĠĠĠ Ġinitial Balance : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġcurrency Code : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbalance Transaction Ġ= ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠId . createNew (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Code Ġ= Ġcurrency Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠTransaction Type . BAL ANCE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ dateTime Ġ= ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoney AccountId Ġ= Ġmoney AccountId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ amount Ġ= Ġinitial Balance . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtransaction Repository . create OrUpdate ( listOf ( balance Transaction )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Pre defined Categories IfNot Exists ( owner Id : ĠId ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( category Repository . categories ( Categories Query ( owner Id Ġ= Ġowner Id )). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Repository . create Pre defined Categories ( owner Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }