Ċ import Ġio . ple o . ant ae us . core . external . Currency Exchange Provider Ċ import Ġio . ple o . ant ae us . core . external . Payment Provider Ċ import Ġio . ple o . ant ae us . data . Customer Dal Ċ import Ġio . ple o . ant ae us . data . Invoice Dal Ċ import Ġio . ple o . ant ae us . models . Currency Ċ import Ġio . ple o . ant ae us . models . Invoice Ċ import Ġio . ple o . ant ae us . models . Invoice Status Ċ import Ġio . ple o . ant ae us . models . Money Ċ import Ġjava . math . BigDecimal Ċ import Ġkotlin . random . Random Ċ Ċ // ĠThis Ġwill Ġcreate Ġall Ġschemas Ġand Ġsetup Ġinitial Ġdata Ċ internal Ġfun Ġsetup Initial Data ( invoice Dal : ĠInvoice Dal , Ġcustomer Dal : ĠCustomer Dal ) Ġ{ ĊĠĠĠ Ġval Ġcustomers Ġ= Ġ( 1 .. 1 0 0 ). map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġcustomer Dal . create Customer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= ĠCurrency . values ()[ Random . nextInt ( 0 , ĠCurrency . values (). size )] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcustomers . forEach Ġ{ Ġcustomer Ġ-> ĊĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Dal . create Invoice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= ĠMoney ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠBigDecimal ( Random . next Double ( 1 0 . 0 , Ġ 5 0 0 . 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġcustomer . currency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustomer Ġ= Ġcustomer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġif Ġ( it Ġ== Ġ 1 ) ĠInvoice Status . PENDING Ġelse ĠInvoice Status . PA ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠThis Ġis Ġthe Ġmocked Ġinstance Ġof Ġthe Ġpayment Ġprovider Ċ internal Ġfun Ġget Payment Provider (): ĠPayment Provider Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠPayment Provider Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcharge ( invoice : ĠInvoice ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRandom . next Boolean () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠThis Ġis Ġthe Ġmocked Ġinstance Ġof Ġthe Ġcurrency Ġexchange Ġprovider Ċ internal Ġfun Ġget Currency Ex h ange Provider (): ĠCurrency Exchange Provider Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠCurrency Exchange Provider Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexchange Currency ( source : ĠMoney , Ġtarget : ĠCurrency ): ĠMoney Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMoney ( BigDecimal ( Random . nextInt ( 1 , Ġ 1 0 )), Ġtarget ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }