package Ġcom . my m om art gallery Ċ Ċ import Ġart listing . repository . Ar ts Ċ import Ġcom . my m om art gallery . art listing . repository . Images Ċ import Ġcom . my m om art gallery . user . repository . Users Ċ import Ġcom . zaxxer . hikari . HikariConfig Ċ import Ġcom . zaxxer . hikari . Hikari DataSource Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . Schema Utils Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ Ċ object ĠDatabase Factory Ġ{ ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . connect ( hikari ()) ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Utils . create ( Users ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Utils . create ( Ar ts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Utils . create ( Images ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġh ikari (): ĠH ikari DataSource Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠH ikariConfig () ĊĠĠĠĠĠĠĠ Ġconfig . driver ClassName Ġ= ĠSystem . getenv (" JDBC _ DRIVER ") Ġ// Ġ 1 ĊĠĠĠĠĠĠĠ Ġconfig . jdbc Url Ġ= ĠSystem . getenv (" JDBC _ DATABASE _ URL ") Ġ// Ġ 2 ĊĠĠĠĠĠĠĠ Ġconfig . maximum PoolSize Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconfig . is Auto Commit Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġconfig . transaction Isolation Ġ= Ġ" TRANSACTION _ REPEAT ABLE _ READ " ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠSystem . getenv (" DB _ USER ") Ġ// Ġ 3 ĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . username Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= ĠSystem . getenv (" DB _ PASSWORD ") Ġ// Ġ 4 ĊĠĠĠĠĠĠĠ Ġif Ġ( password Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . password Ġ= Ġpassword ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconfig . validate () ĊĠĠĠĠĠĠĠ Ġreturn ĠH ikari DataSource ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 5 ĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġdb Query ( block : Ġ() Ġ-> ĠT ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ Ġblock () Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ }