import Ġio . ple o . ant ae us . core . events . EventHandler Ċ import Ġio . ple o . ant ae us . core . exceptions . Network Exception Ċ import Ġio . ple o . ant ae us . core . external . Currency Converter Ċ import Ġio . ple o . ant ae us . core . external . Payment Provider Ċ import Ġio . ple o . ant ae us . data . Ant ae us 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 Ġio . ple o . ant ae us . models . events . Event Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . math . BigDecimal Ċ import Ġkotlin . random . Random Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ // ĠThis Ġwill Ġcreate Ġall Ġschemas Ġand Ġsetup Ġinitial Ġdata Ċ internal Ġfun Ġsetup Initial Data ( dal : ĠAnt ae us Dal ) Ġ{ ĊĠĠĠ Ġval Ġcustomers Ġ= Ġ( 1 .. 1 0 0 ). map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġdal . create Customer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= ĠCurrency . values ()[ Random . nextInt ( 0 , ĠCurrency . values (). size )] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcustomers . forEach Ġ{ Ġcustomer Ġ-> ĊĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Random . next Double () Ġ> Ġ 0 . 7 ) Ġthrow ĠNetwork Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRandom . next Boolean () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġget Currency Converter (): ĠCurrency Converter Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠCurrency Converter Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( money : ĠMoney , Ġcurrency : ĠCurrency ): ĠMoney Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMoney ( money . value Ġ* ĠBigDecimal . valueOf ( Random . next Double ()), Ġcurrency ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġget EventHandler (): ĠEventHandler Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠEventHandler Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġevent Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }