@ file : Suppress (" EXPERIMENT AL _ IS _ NOT _ ENABLED ") Ċ Ċ package Ġdev . z lag i . data . database Ċ Ċ import Ġcom . zaxxer . hikari . HikariConfig Ċ import Ġcom . zaxxer . hikari . Hikari DataSource Ċ import Ġdev . z lag i . data . database . table . B logs Ċ import Ġdev . z lag i . data . database . table . Tokens Ċ import Ġdev . z lag i . data . database . table . Users Ċ import Ġkotlinx . coroutines . Del icate Cor outines Api Ċ import Ġkotlinx . coroutines . new Fixed ThreadPool Context Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . Schema Utils . create Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġjava . net . URI Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ @ Opt In ( Del icate Cor outines Api :: class ) Ċ class ĠDatabase Provider Ġ: ĠDatabase Provider Contract , ĠK oin Component Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdispatcher : ĠCor outine Context ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġnew Fixed ThreadPool Context ( 5 , Ġ" database - pool ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . connect ( hikari ()) ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ( Users ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ( B logs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ( Tokens ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġh ikari (): ĠH ikari DataSource Ġ{ ĊĠĠĠĠĠĠĠ ĠH ikariConfig (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver ClassName Ġ= Ġdriver Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc Url Ġ= Ġ" jdbc : postgresql ://${ host }:${ port }/${ dbname }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġdb password ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Auto Commit Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum PoolSize Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Isolation Ġ= Ġ" TRANSACTION _ REPEAT ABLE _ READ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠH ikari DataSource ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠDatabase Config Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġdriver Class Ġ= Ġ" org . postgresql . Driver " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġhost Ġ= Ġ" localhost " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġport Ġ= Ġ 3 5 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġdb name Ġ= Ġ" blog fy " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġuser Ġ= Ġ" postgres " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġdb password Ġ= Ġ" root " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFor Ġher oku Ġdeploy ement ĊĠĠ Ġ/* Ġprivate Ġfun Ġh ikari (): ĠH ikari DataSource Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠH ikariConfig () ĊĠĠĠĠĠĠĠ Ġconfig . driver ClassName Ġ= ĠSystem . getenv (" JDBC _ DRIVER ") ĊĠĠĠĠĠĠĠ Ġconfig . is Auto Commit Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġconfig . transaction Isolation Ġ= Ġ" TRANSACTION _ REPEAT ABLE _ READ " ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠURI ( System . getenv (" DATABASE _ URL ")) ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġuri . userInfo . split (": "). to Typed Array ()[ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġuri . userInfo . split (": "). to Typed Array ()[ 1 ] ĊĊĠĠĠĠĠĠĠ Ġconfig . jdbc Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" jdbc : postgresql ://" Ġ+ Ġuri . host Ġ+ Ġ":" Ġ+ Ġuri . port Ġ+ Ġuri . path Ġ+ Ġ"? ssl mode = require " Ġ+ Ġ"& user =$ username & password =$ password " ĊĊĊĠĠĠĠĠĠĠ Ġconfig . validate () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠH ikari DataSource ( config ) ĊĠĠĠ Ġ}*/ Ċ Ċ } Ċ Ċ interface ĠDatabase Provider Contract Ġ{ ĊĠĠĠ Ġfun Ġinit () Ċ }