package Ġpl . co i . gov . demo . demo helloworld Ċ Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . cloud . sle uth . annotation . New Span Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . jdbc . core . Jdbc Template Ċ import Ġorg . springframework . jdbc . core . PreparedStatement Setter Ċ import Ġorg . springframework . jdbc . core . Row Callback Handler Ċ import Ġorg . springframework . web . bind . annotation . GetMapping Ċ import Ġorg . springframework . web . bind . annotation . PathVariable Ċ import Ġorg . springframework . web . bind . annotation . PostMapping Ċ import Ġorg . springframework . web . bind . annotation . RequestParam Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ import Ġjava . sql . PreparedStatement Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ @ RestController Ċ class ĠCountry Handler Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġjdbc Template : ĠJdbc Template ĊĊĠĠĠ Ġ@ New Span ĊĠĠĠ Ġ@ GetMapping ( path Ġ= Ġ["/ test / country /{ id } "], Ġproduces Ġ= Ġ[ MediaType . TEXT _ PLAIN _ VALUE ]) ĊĠĠĠ Ġfun Ġget (@ PathVariable (" id ") Ġid : Int ): ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" GET Ġ{}", Ġid ) ĊĠĠĠĠĠĠĠ Ġvar Ġexist : Boolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġvalue : String Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġjdbc Template . query (" SELECT Ġname ĠFROM Ġcountry ĠWHERE Ġid Ġ= Ġ?", ĠPreparedStatement Setter (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setInt ( 1 , Ġid ) ĊĠĠĠĠĠĠĠ Ġ} Ġ, ĠRow Callback Handler (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit . getString ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexist Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif ( exist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( value ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . not Found (). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ New Span ĊĠĠĠ Ġ@ GetMapping ( path Ġ= Ġ["/ test / country "], Ġproduces Ġ= Ġ[ MediaType . TEXT _ PLAIN _ VALUE ]) ĊĠĠĠ Ġfun Ġlist (): ĠResponseEntity < StringBuilder > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" list ") ĊĠĠĠĠĠĠĠ Ġvar Ġexist : Boolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġvalue : StringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġjdbc Template . query (" SELECT Ġid , name ĠFROM Ġcountry ", ĠRow Callback Handler (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . append ( it . getString ( 1 )). append (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . append ( it . getString ( 2 )). append (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexist Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif ( exist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( value ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . not Found (). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ New Span ĊĠĠĠ Ġ@ PostMapping ( path Ġ= Ġ["/ test / country "], Ġproduces Ġ= Ġ[ MediaType . TEXT _ PLAIN _ VALUE ]) ĊĠĠĠ Ġfun Ġpost (@ RequestParam (" name ") Ġname : String ): ĠResponseEntity < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" post Ġ{}", Ġname ) ĊĊĠĠĠĠĠĠĠ Ġjdbc Template . update (" INSERT ĠINTO Ġcountry ( name ) ĠVALUES Ġ(? )", ĠPreparedStatement Setter (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setString ( 1 , Ġname ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( HttpStatus . CREATED ). build () ĊĠĠĠ Ġ} Ċ }