package Ġcom . awesome . db Ċ Ċ import Ġio . vertx . core . Future Ċ import Ġio . vertx . ext . sql . SQL Connection Ċ import Ġcom . awesome . Async Vert x . async Vx Ċ import Ġio . vertx . kotlin . lang . map If Success Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . format . DateTime Formatter Builder Ċ Ċ open Ġclass ĠDb Handler ( val Ġconn : ĠSQL Connection ) Ġ{ ĊĠĠĠ Ġobject ĠLocalDateTime Encoder Decoder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠZero ed Timestamp Ġ= Ġ" 0 0 0 0 - 0 0 - 0 0 Ġ 0 0 : 0 0 : 0 0 " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoptional Ġ= ĠDateTime Formatter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Pattern (". SSSS SS "). to Formatter () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġformat Ġ= ĠDateTime Formatter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( DateTime Formatter . ISO _ LOCAL _ DATE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Optional ( optional ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Formatter () ĊĊĠĠĠĠĠĠĠ Ġfun Ġencode ( value : ĠAny ): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat . format ( value Ġas ĠLocalDateTime ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecode ( value : ĠString ): ĠLocalDateTime ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Zero ed Timestamp Ġ== Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . from ( format . parse ( value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlong Parser Ġ= ĠField Parser < Long > Ġ{ Ġarr Ġ-> Ġarr . getLong ( 0 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Parser Ġ= ĠRow Parser < User > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ( id Ġ= Ġjson . getLong (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġjson . getString (" name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ= Ġjson . getInteger (" score ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget _ user _ by _ name ( user _ name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . query (""" SELECT Ġ* ĠFROM Ġ` users ` ĠWHERE Ġname Ġ= Ġ? """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( user _ name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Parser :: single Async ) ĊĊĠĠĠ Ġfun Ġget _ user _ by _ id ( user _ id : ĠLong ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . query (""" SELECT Ġ* ĠFROM Ġ` users ` ĠWHERE Ġid Ġ= Ġ? """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( user _ id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Parser :: single Async ) ĊĊĠĠĠ Ġfun Ġadd _ user ( user : ĠUser ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . update (""" INSERT ĠINTO Ġ` users ` Ġ( name , Ġscore ) ĠVALUES Ġ( ?, Ġ? ) """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( user . name , Ġuser . score )) ĊĊĠĠĠ Ġfun Ġget _ all _ users () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . query (""" SELECT Ġ* ĠFROM Ġ` users ` """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Parser :: multi Async ) ĊĊĠĠĠ Ġfun Ġget _ or _ create _ user ( user : ĠUser ): ĠFuture < Long ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Vx < Long ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġawait ( conn . query (" SELECT Ġid ĠFROM Ġusers ĠWHERE Ġname Ġ= Ġ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( user . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Parser :: parse Async )) Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġawait ( conn . query (" INSERT ĠINTO Ġ` users `( name , Ġscore ) ĠVALUES Ġ( ?, Ġ? )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( user . name , Ġuser . score ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Parser :: parse Async )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ }