package Ġio . p act flow . provider state sex ample . consumer Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġmu . K Logging Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . boot . Spring Application Ċ import Ġorg . springframework . boot . autoconfigure . SpringBoot Application Ċ import Ġorg . springframework . boot . web . client . Rest Template Builder Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . core . Parameterized Type Reference Ċ import Ġorg . springframework . h ate o as . Resource Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġorg . springframework . web . bind . annotation . Request Method Ċ import Ġorg . springframework . web . bind . annotation . RequestParam Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ import Ġorg . springframework . web . client . Rest Template Ċ Ċ data Ġclass ĠAccount ( ĊĠ Ġvar Ġid : ĠInt , ĊĠ Ġvar Ġaccount Number : ĠAccount Number ?, ĊĠ Ġvar Ġversion : ĠInt , ĊĠ Ġvar Ġname : ĠString Ġ= Ġ"", ĊĠ Ġvar Ġaccount Ref : ĠString Ġ= Ġ"", ĊĠ Ġvar Ġcreated Date : ĠString Ġ= Ġ"", ĊĠ Ġvar Ġlast ModifiedDate : ĠString Ġ= Ġ"" Ċ ) Ċ Ċ data Ġclass ĠAccount Number ( var Ġid : ĠInt ) Ċ Ċ @ RestController Ċ class ĠTransaction Controller Ġ{ ĊĊĠ Ġ@ Autowired ĊĠ Ġprivate Ġlateinit Ġvar Ġrest Template : ĠRest Template ĊĊĠ Ġ@ Value ("\ ${ provider . url }") ĊĠ Ġlateinit Ġvar Ġprovider Url : ĠString ĊĊĠ Ġ@ RequestMapping ("/ transactions ", Ġmethod Ġ= Ġ[ Request Method . POST ]) ĊĠ Ġfun Ġnew (@ RequestParam Ġaccount Number : ĠInt ): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠ Ġlogger . info Ġ{ Ġ" Creating Ġa Ġnew Ġtransaction Ġfor Ġaccount Ġ$ account Number " Ġ} ĊĠĠĠ Ġval Ġurl Ġ= Ġ"$ provider Url / accounts / search / findOne By Account Number Id ? account Number =$ account Number " ĊĠĠĠ Ġlogger . info Ġ{ Ġ" Getting Ġaccount Ġdetails Ġ-> Ġ$ url " Ġ} ĊĠĠĠ Ġval Ġresponse Entity Ġ= Ġrest Template . exchange ( url , ĠHttpMethod . GET , Ġnull , ĊĠĠĠĠĠ Ġobject Ġ: ĠParameter ized Type Reference < Resource < Account >>() Ġ{}) ĊĠĠĠ Ġreturn Ġif Ġ( response Entity . statusCode Ġ== ĠHttpStatus . OK ) Ġ{ ĊĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Got Ġresponse Ġ${ response Entity . body }" Ġ} ĊĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" ĠĠĠĠĠĠĠĠĠ ĠId Ġ${ response Entity . body . id }" Ġ} ĊĠĠĠĠĠ Ġval Ġaccount Ġ= Ġresponse Entity . body . content ĊĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" ĠĠĠĠ ĠContent Ġ$ account " Ġ} ĊĠĠĠĠĠ Ġmap Of (" account " Ġto Ġaccount ) ĊĠĠĠ Ġ} Ġelse Ġempty Map () ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject : ĠK Logging () Ċ } Ċ Ċ @ SpringBoot Application Ċ class ĠApp Ġ{ ĊĠ Ġ@ Bean ĊĠ Ġfun Ġrest Template ( builder : ĠRest Template Builder ) Ġ= Ġbuilder . build () ĊĊĠ Ġ@ Bean ĊĠ Ġfun ĠobjectMapper () Ġ= ĠObjectMapper (). register Module ( Kotlin Module ()) Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ ĠSpring Application . run ( App :: class . java , Ġ* args ) Ċ } Ċ