package Ġkotlin serverless . framework . models Ċ Ċ import Ġkotlin serverless . framework . dispatch ers . Request Dispatcher Ċ import Ġcom . amazonaws . services . lambda . runtime . Context Ċ import Ġcom . amazonaws . services . lambda . runtime . RequestHandler Ċ import Ġcom . bug sn ag . Bug sn ag Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġmain . da os .* Ċ import Ġorg . apache . log 4 j . Basic Configurator Ċ import Ġorg . apache . log 4 j . Log Manager Ċ import Ġorg . jetbrains . ex posed . exceptions . Ex posed SQLException Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . Schema Utils Ċ import Ġorg . jetbrains . ex posed . sql . insert Ignore Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġjava . sql . Connection Ċ Ċ open Ġclass ĠHandler : ĠRequest Handler < Map < String , ĠAny >, ĠApi Gateway Response > Ġ{ ĊĊĠ Ġvar Ġrequest Dispatcher : ĠRequest Dispatcher Ġ= ĠRequest Dispatcher () ĊĊĠ Ġconstructor () Ġ{ ĊĠĠĠ ĠBasic Configurator . configure () ĊĠĠĠ Ġconnect To Database () ĊĠĠĠ Ġbuild Tables () ĊĠ Ġ} ĊĊĠ Ġconstructor ( test : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġif (! test !! ) Ġ{ ĊĠĠĠĠĠ ĠBasic Configurator . configure () ĊĠĠĠ Ġ} ĊĠĠĠ Ġconnect To Database () ĊĠĠĠ Ġbuild Tables ( test ) ĊĠ Ġ} ĊĊĠ Ġfun Ġget Db Name (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġdb . url ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġhandle Request ( input : ĠMap < String , ĠAny >, Ġcontext : ĠContext ): ĠApi Gateway Response Ġ{ ĊĊĠĠĠ Ġvar Ġstatus Ġ= Ġ 5 0 0 ĊĠĠĠ Ġvar Ġbody : ĠAny ? Ġ= Ġnull ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġbody Ġ= Ġrequest Dispatcher . locate ( Api Gateway Request ( input , Ġcontext )) ĊĊĠĠĠĠĠ Ġstatus Ġ= Ġwhen Ġ( body Ġ== Ġnull Ġ|| Ġbody Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ 2 0 4 ĊĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ 2 0 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠMy Exception ) Ġ{ ĊĠĠĠĠĠ Ġlog ( e , Ġe . message ) ĊĠĠĠĠĠ Ġstatus Ġ= Ġe . code ĊĠĠĠĠĠ Ġbody Ġ= Ġe . message ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġlog ( e , Ġe . message ) ĊĠĠĠĠĠ Ġstatus Ġ= Ġ 5 0 0 ĊĠĠĠĠĠ Ġbody Ġ= Ġ" Internal Ġserver Ġerror Ġ" Ġ+ Ġe . message . toString () Ġ+ Ġ"\ n " Ġ+ Ġe . stack Trace . map Ġ{ Ġ"\ n "+ it . toString () Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠ Ġreturn Ġbuild Ġ{ ĊĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġstatus ĊĠĠĠĠĠĠĠ Ġraw Body Ġ= Ġbody ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġdb : ĠDatabase ĊĠĠĠ Ġlateinit Ġvar Ġconnection : ĠConnection ĊĊĠĠĠ Ġinline Ġfun Ġbuild ( block : ĠApi Gateway Response . Builder . () Ġ-> ĠUnit ) Ġ= ĠApi Gateway Response . Builder (). apply ( block ). build () ĊĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLog Manager . getLogger ( this :: class . java ) !! ĊĠĠĠ Ġval ĠobjectMapper Ġ= ĠObjectMapper () ĊĊĠĠĠ Ġprivate Ġvar Ġbug sn ag Instance : ĠBug sn ag ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġfun Ġbug sn ag (): ĠBug sn ag Ġ{ ĊĠĠĠĠĠ Ġif ( bug sn ag Instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbug sn ag Instance Ġ= ĠBug sn ag ( System . getenv (" bug sn ag _ api _ key ") Ġ?: Ġ" local ") ĊĠĠĠĠĠĠĠ Ġbug sn ag Instance !!. set Notify Release Stages (" production ", Ġ" development ") ĊĠĠĠĠĠĠĠ Ġbug sn ag Instance !!. set Release Stage ( System . getenv (" release _ stage ") Ġ?: Ġ" local ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġbug sn ag Instance !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠTABLES Ġ= ĠarrayOf ( ĊĠĠĠĠĠ ĠHealth checks , ĊĠĠĠĠĠ ĠUsers , ĊĠĠĠĠĠ ĠUser Accounts , ĊĠĠĠĠĠ ĠApi Cred s , ĊĠĠĠĠĠ ĠMet adat as , ĊĠĠĠĠĠ ĠUsers Metadata ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġlog ( e : ĠThrowable ?, Ġmessage : ĠString ?) Ġ{ ĊĠĠĠĠĠ Ġif ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLOG . error ( message , Ġe ) ĊĠĠĠĠĠĠĠ Ġbug sn ag (). notify ( e ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLOG . info ( message ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect And Build Tables (): ĠDatabase Ġ{ ĊĠĠĠĠĠ Ġdb Ġ= Ġconnect To Database () ĊĠĠĠĠĠ Ġdrop Tables () ĊĠĠĠĠĠ Ġbuild Tables () ĊĠĠĠĠĠ Ġreturn Ġdb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Tables ( test : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠ ĠSchema Utils . create (* TABLE S ) ĊĠĠĠĠĠĠĠ Ġif (! test ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHealth checks . insert Ignore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ status ] Ġ= Ġ" database _ healthy " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ message ] Ġ= Ġ" connected Ġto Ġdatabase ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHealth checks . insert Ignore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ status ] Ġ= Ġ" database _ un healthy " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ message ] Ġ= Ġ" failed Ġto Ġconnect Ġto Ġdatabase ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠEx posed SQLException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect To Database (): ĠDatabase Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠDatabase . connect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . getenv (" database _ url ") Ġ?: Ġ" jdbc : h 2 : mem : test ; MODE = MySQL ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠSystem . getenv (" database _ driver ") Ġ?: Ġ" org . h 2 . Driver ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= ĠSystem . getenv (" database _ user ") Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= ĠSystem . getenv (" database _ password ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġconnection Ġ= Ġdb . connector . invoke () ĊĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( e . message ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġdb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect From Database () Ġ{ ĊĠĠĠĠĠ Ġconnection . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect And Drop Tables () Ġ{ ĊĠĠĠĠĠ Ġdrop Tables () ĊĠĠĠĠĠ Ġdisconnect From Database () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdrop Tables () Ġ{ ĊĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠ ĠSchema Utils . drop (* TABLE S ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }