/* ĊĠĠĠ ĠDefines Ġthe Ġmain () Ġentry Ġpoint Ġof Ġthe Ġapp . ĊĠĠĠ ĠConfig ures Ġthe Ġdatabase Ġand Ġsets Ġup Ġthe ĠREST Ġweb Ġservice . Ċ Ġ*/ Ċ Ċ @ file : Jvm Name (" Ant ae us App ") Ċ Ċ package Ġio . ple o . ant ae us . app Ċ Ċ import Ġget Email Provider Ċ import Ġget Payment Provider Ċ import Ġget Ticket ing Provider Ċ import Ġio . ple o . ant ae us . core . res il ience . get Retry Registry Ċ import Ġio . ple o . ant ae us . core . services . Billing Service Ċ import Ġio . ple o . ant ae us . core . services . Customer Operations Service Ċ import Ġio . ple o . ant ae us . core . services . Customer Service Ċ import Ġio . ple o . ant ae us . core . services . Email Service Ċ import Ġio . ple o . ant ae us . core . services . Invoice Service Ċ import Ġio . ple o . ant ae us . data . Ant ae us Dal Ċ import Ġio . ple o . ant ae us . data . Customer Table Ċ import Ġio . ple o . ant ae us . data . Invoice Table Ċ import Ġio . ple o . ant ae us . rest . Ant ae us Rest Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . Schema Utils Ċ import Ġorg . jetbrains . ex posed . sql . Std Out Sql Logger Ċ import Ġorg . jetbrains . ex posed . sql . add Logger Ċ import Ġorg . jetbrains . ex posed . sql . transactions . Transaction Manager Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġsetup Initial Data Ċ import Ġjava . io . File Ċ import Ġjava . sql . Connection Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġ// ĠThe Ġtables Ġto Ġcreate Ġin Ġthe Ġdatabase . ĊĠĠĠ Ġval Ġtables Ġ= ĠarrayOf ( Invoice Table , ĠCustomer Table ) ĊĊĠĠĠ Ġval Ġdb File : ĠFile Ġ= ĠFile . create TempFile (" ant ae us - db ", Ġ". sqlite ") ĊĠĠĠ Ġ// ĠConnect Ġto Ġthe Ġdatabase Ġand Ġcreate Ġthe Ġneeded Ġtables . ĠDrop Ġany Ġexisting Ġdata . ĊĠĠĠ Ġval Ġdb Ġ= ĠDatabase ĊĠĠĠĠĠĠĠ Ġ. connect ( url Ġ= Ġ" jdbc : sqlite :${ db File . absolute Path }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġ" org . sqlite . JDBC ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġ" root ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġ"") ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Manager . manager . default Isolation Level Ġ= ĠConnection . TRANSACTION _ SERIAL IZ ABLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Logger ( Std Out Sql Logger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDrop Ġall Ġexisting Ġtables Ġto Ġensure Ġa Ġclean Ġs late Ġon Ġeach Ġrun ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Utils . drop (* tables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġall Ġtables ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Utils . create (* tables ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSet Ġup Ġdata Ġaccess Ġlayer . ĊĠĠĠ Ġval Ġdal Ġ= ĠAnt ae us Dal ( db Ġ= Ġdb ) ĊĊĠĠĠ Ġ// ĠInsert Ġexample Ġdata Ġin Ġthe Ġdatabase . ĊĠĠĠ Ġsetup Initial Data ( dal Ġ= Ġdal ) ĊĊĠĠĠ Ġ// ĠGet Ġthird Ġparties ĊĠĠĠ Ġval Ġpayment Provider Ġ= Ġget Payment Provider () ĊĠĠĠ Ġval Ġemail Provider Ġ= Ġget Email Provider () ĊĠĠĠ Ġval Ġticket ing Provider Ġ= Ġget Ticket ing Provider () ĊĊĊĠĠĠ Ġ// ĠCreate Ġcore Ġservices ĊĠĠĠ Ġval Ġinvoice Service Ġ= ĠInvoice Service ( dal Ġ= Ġdal ) ĊĠĠĠ Ġval Ġcustomer Service Ġ= ĠCustomer Service ( dal Ġ= Ġdal ) ĊĠĠĠ Ġval Ġemail Service Ġ= ĠEmail Service ( email Provider Ġ= Ġemail Provider , Ġcustomer Service Ġ= Ġcustomer Service ) ĊĠĠĠ Ġval Ġcustomer Operations Service Ġ= ĠCustomer Operations Service ( ticket ing Provider Ġ= Ġticket ing Provider ) ĊĊĠĠĠ Ġ// ĠGet Ġretry Ġregistry ĊĠĠĠ Ġval Ġregistry Ġ= Ġget Retry Registry () ĊĊĠĠĠ Ġ// ĠThis Ġis Ġ_ your _ Ġbilling Ġservice Ġto Ġbe Ġincluded Ġwhere Ġyou Ġsee Ġfit ĊĠĠĠ Ġval Ġbilling Service Ġ= ĠBilling Service ( ĊĠĠĠĠĠĠĠ Ġretry Ġ= Ġregistry . retry (" payment - retry "), ĊĠĠĠĠĠĠĠ Ġpayment Provider Ġ= Ġpayment Provider , ĊĠĠĠĠĠĠĠ Ġinvoice Service Ġ= Ġinvoice Service , ĊĠĠĠĠĠĠĠ Ġemail Service Ġ= Ġemail Service , ĊĠĠĠĠĠĠĠ Ġcustomer Operations Service Ġ= Ġcustomer Operations Service ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠSchedule Ġbilling ĊĠĠĠ Ġval Ġscheduler Ġ= ĠExec utors . new Scheduled ThreadPool ( 1 ) ĊĠĠĠ Ġscheduler . schedule At Fixed Rate ({ ĊĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġday OfMonth Ġ= Ġcal [ Calendar . DAY _ OF _ MONTH ] ĊĠĠĠĠĠĠĠ Ġif Ġ( day OfMonth Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġis Ġthe Ġfirst Ġday Ġof Ġthe Ġmonth Ġschedule Ġpending Ġpayments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Service . bill Clients () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġretry Ġfailed Ġin voices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Service . retry Failed In voices () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġ 0 , Ġ 1 , ĠTimeUnit . DAYS ) ĊĊĠĠĠ Ġ// ĠCreate ĠREST Ġweb Ġservice ĊĠĠĠ ĠAnt ae us Rest ( ĊĠĠĠĠĠĠĠ Ġinvoice Service Ġ= Ġinvoice Service , ĊĠĠĠĠĠĠĠ Ġcustomer Service Ġ= Ġcustomer Service , ĊĠĠĠĠĠĠĠ Ġbilling Service Ġ= Ġbilling Service ĊĠĠĠ Ġ). run () Ċ } Ċ