package Ġkr . j ade kim . di . k oin Ċ Ċ import Ġcom . zaxxer . hikari . Hikari DataSource Ċ import Ġio . lett uce . core . codec . Redis Codec Ċ import Ġio . lett uce . core . codec . String Codec Ċ import Ġkr . j ade kim . db . ex posed . Crud DB Ċ import Ġkr . j ade kim . db . ex posed . DB Ċ import Ġkr . j ade kim . db . ex posed . Read DB Ċ import Ġkr . j ade kim . redis . lett uce . LE TT UCE _ DEFAULT _ POOL _ SIZE Ċ import Ġkr . j ade kim . redis . lett uce . Redis Ċ import Ġkr . j ade kim . redis . lett uce . Replica Redis Ċ import Ġkr . j ade kim . redis . lett uce . Standalone Redis Ċ import Ġorg . k oin . core . module . Module Ċ import Ġorg . k oin . core . scope . Scope Ċ import Ġorg . k oin . dsl . bind Ċ import Ġorg . k oin . dsl . onClose Ċ import Ġorg . k oin . ext . getInt Property Ċ import Ġjava . time . Duration Ċ import Ġjavax . sql . DataSource Ċ Ċ fun ĠScope . getInt ( key : ĠString ): ĠInt ? Ġ{ ĊĠĠĠ Ġreturn Ġget K oin (). getInt Property ( key ) Ċ } Ċ Ċ fun ĠScope . getInt ( key : ĠString , ĠdefaultValue : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġget K oin (). getInt Property ( key , ĠdefaultValue ) Ċ } Ċ Ċ fun ĠScope . getBoolean ( key : ĠString ): ĠBoolean ? Ġ{ ĊĠĠĠ Ġreturn Ġget K oin (). getProperty ( key )?. equals (" true ", Ġtrue ) Ċ } Ċ Ċ fun ĠScope . getBoolean ( key : ĠString , ĠdefaultValue : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġget K oin (). getProperty ( key )?. equals (" true ", Ġtrue ) Ġ?: ĠdefaultValue Ċ } Ċ Ċ fun ĠScope . getString ( key : ĠString ): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġget K oin (). getProperty ( key ) Ċ } Ċ Ċ fun ĠScope . getString ( key : ĠString , ĠdefaultValue : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġget K oin (). getProperty ( key , ĠdefaultValue ) Ċ } Ċ Ċ fun ĠModule . dataSource ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠDS Qualifier , ĊĠĠĠĠĠĠĠ Ġdriver : ĠString , ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġis ReadOnly : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġqualifier . name , ĊĠĠĠĠĠĠĠ Ġpool Size : ĠInt Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠ Ġauto Connect : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġconfigure : ĠH ikari DataSource . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠH ikari DataSource (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . driver ClassName Ġ= Ġdriver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . jdbc Url Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . username Ġ= Ġusername ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . password Ġ= Ġpassword ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pool Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is ReadOnly Ġ= Ġis ReadOnly ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . maximum PoolSize Ġ= Ġpool Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Timeout Ġ= ĠDuration . of Seconds ( 5 ). to Millis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auto Connect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// initial Ġwith Ġstartup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. bind ( DataSource :: class ). onClose Ġ{ Ġit ?. close () Ġ} Ċ } Ċ Ċ fun ĠModule . dataSource ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠDS Qualifier , ĊĠĠĠĠĠĠĠ Ġis ReadOnly : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġqualifier . name , ĊĠĠĠĠĠĠĠ Ġpool Size : ĠInt Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠ Ġproperty Prefix : ĠString Ġ= Ġif Ġ( is ReadOnly ) Ġ" db .$ name . readonly ." Ġelse Ġ" db .$ name .", ĊĠĠĠĠĠĠĠ Ġauto Connect : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġconfigure : ĠH ikari DataSource . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠH ikari DataSource (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver ClassName Ġ= ĠgetString ( property Prefix Ġ+ Ġ" driver ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc Url Ġ= ĠgetString ( property Prefix Ġ+ Ġ" url ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= ĠgetString ( property Prefix Ġ+ Ġ" username ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= ĠgetString ( property Prefix Ġ+ Ġ" password ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . maximum PoolSize Ġ= Ġpool Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is ReadOnly Ġ= Ġis ReadOnly ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Timeout Ġ= ĠDuration . of Seconds ( 5 ). to Millis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auto Connect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// initial Ġwith Ġstartup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. bind ( DataSource :: class ). onClose Ġ{ Ġit ?. close () Ġ} Ċ } Ċ Ċ fun ĠModule . db ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠDB Qualifier , ĊĠĠĠĠĠĠĠ Ġcreate DataSource : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġwith ReadOnly : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġread PoolSize : ĠInt Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠ Ġcr ud PoolSize : ĠInt Ġ= Ġif Ġ( with ReadOnly ) Ġ 3 Ġelse Ġread PoolSize , ĊĠĠĠĠĠĠĠ Ġauto Connect : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġconfigure DataSource : ĠH ikari DataSource . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( create DataSource ) Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource ( qual ifier . ds Qualifier , Ġpool Size Ġ= Ġcr ud PoolSize , Ġauto Connect Ġ= Ġauto Connect , Ġconfigure Ġ= Ġconfigure DataSource ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( with ReadOnly ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier . readOnly DS Qualifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ReadOnly Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool Size Ġ= Ġread PoolSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Connect Ġ= Ġauto Connect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Ġ= Ġconfigure DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle ( qual ifier . readOnly DS Qualifier ) Ġ{ Ġget < DataSource >( qual ifier . ds Qualifier ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĠCr ud DB ( get ( qual ifier . ds Qualifier ), Ġget ( qual ifier . readOnly DS Qualifier )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( Read DB :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( DB :: class ) Ċ } Ċ Ċ fun ĠModule . read DB ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠDB Qualifier , ĊĠĠĠĠĠĠĠ Ġcreate DataSource : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġpool Size : ĠInt Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠ Ġauto Connect : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġconfigure DataSource : ĠH ikari DataSource . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( create DataSource ) Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier . readOnly DS Qualifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ReadOnly Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool Size Ġ= Ġpool Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Connect Ġ= Ġauto Connect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Ġ= Ġconfigure DataSource ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĠRead DB ( get ( qual ifier . readOnly DS Qualifier )) Ġ} Ċ } Ċ Ċ fun ĠModule . standalone Redis ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠRedis Qualifier , ĊĠĠĠĠĠĠĠ Ġhost : ĠString , ĊĠĠĠĠĠĠĠ Ġport : ĠInt Ġ= Ġ 6 3 7 9 , ĊĠĠĠĠĠĠĠ Ġdb : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcodec : ĠRedis Codec < *, Ġ*> Ġ= ĠString Codec (), ĊĠĠĠĠĠĠĠ Ġpool Size : ĠInt Ġ= ĠLET TU CE _ DEFAULT _ POOL _ SIZE Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĠStand alone Redis ( host , Ġport , Ġdb , Ġpassword , Ġcodec , Ġpool Size ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( Redis :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onClose Ġ{ Ġit ?. close () Ġ} Ċ } Ċ Ċ fun ĠModule . standalone Redis ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠRedis Qualifier , ĊĠĠĠĠĠĠĠ Ġcodec : ĠRedis Codec < *, Ġ*> Ġ= ĠString Codec (), ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġqualifier . name , ĊĠĠĠĠĠĠĠ Ġproperty Prefix : ĠString Ġ= Ġ" redis .$ name ." Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStand alone Redis ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" host ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" port ", Ġ 6 3 7 9 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" db ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" password "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcodec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" pool . size ", ĠLET TU CE _ DEFAULT _ POOL _ SIZE ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( Redis :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onClose Ġ{ Ġit ?. close () Ġ} Ċ } Ċ Ċ fun ĠModule . standalone String Redis ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠRedis Qualifier , ĊĠĠĠĠĠĠĠ Ġhost : ĠString , ĊĠĠĠĠĠĠĠ Ġport : ĠInt Ġ= Ġ 6 3 7 9 , ĊĠĠĠĠĠĠĠ Ġdb : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkey Prefix : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġpool Size : ĠInt Ġ= ĠLET TU CE _ DEFAULT _ POOL _ SIZE Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĠStand alone Redis . string Codec ( host , Ġport , Ġdb , Ġpassword , Ġkey Prefix , Ġpool Size ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( Redis :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onClose Ġ{ Ġit ?. close () Ġ} Ċ } Ċ Ċ fun ĠModule . standalone String Redis ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠRedis Qualifier , ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġqualifier . name , ĊĠĠĠĠĠĠĠ Ġproperty Prefix : ĠString Ġ= Ġ" redis .$ name ." Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStand alone Redis . string Codec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" host ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" port ", Ġ 6 3 7 9 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" db ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" password "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" key . prefix ", Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" pool . size ", ĠLET TU CE _ DEFAULT _ POOL _ SIZE ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( Redis :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onClose Ġ{ Ġit ?. close () Ġ} Ċ } Ċ Ċ fun ĠModule . replica String Redis ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠRedis Qualifier , ĊĠĠĠĠĠĠĠ Ġhost : ĠString , ĊĠĠĠĠĠĠĠ Ġport : ĠInt Ġ= Ġ 6 3 7 9 , ĊĠĠĠĠĠĠĠ Ġdb : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkey Prefix : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġpool Size : ĠInt Ġ= ĠLET TU CE _ DEFAULT _ POOL _ SIZE Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĠReplica Redis . string Codec ( host , Ġport , Ġdb , Ġpassword , Ġkey Prefix , Ġpool Size ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( Redis :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onClose Ġ{ Ġit ?. close () Ġ} Ċ } Ċ Ċ fun ĠModule . replica String Redis ( ĊĠĠĠĠĠĠĠ Ġqualifier : ĠRedis Qualifier , ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġqualifier . name , ĊĠĠĠĠĠĠĠ Ġproperty Prefix : ĠString Ġ= Ġ" redis .$ name ." Ċ ) Ġ{ ĊĠĠĠ Ġsingle ( qual ifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠReplica Redis . string Codec ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" host ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" port ", Ġ 6 3 7 9 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" db ", Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" password "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( property Prefix Ġ+ Ġ" key . prefix ", Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( property Prefix Ġ+ Ġ" pool . size ", ĠLET TU CE _ DEFAULT _ POOL _ SIZE ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( Redis :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onClose Ġ{ Ġit ?. close () Ġ} Ċ }