package Ġcom . github . luc as ls . kotlin sum mit demo 2 0 1 8 . backend coroutines . repository Ċ Ċ import Ġcom . github . luc as ls . kotlin sum mit demo 2 0 1 8 . backend coroutines . domain . Card Info Ċ import Ġkotlinx . coroutines . experimental .* Ċ import Ġkotlinx . coroutines . experimental . reactive . await First Ċ import Ġkotlinx . coroutines . experimental . select s . select Ċ import Ġkotlinx . coroutines . experimental . select s . select Un bi ased Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . web . reactive . function . client . Web Client Ċ import Ġorg . springframework . web . reactive . function . client . body To Mono Ċ Ċ @ Component Ċ class ĠGateway Repository ( ĊĠĠĠ Ġweb Client Builder : ĠWeb Client . Builder Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġweb Client Ġ= Ġweb Client Builder . build () ĊĊĠĠĠ Ġdata Ġclass ĠResult ( ĊĠĠĠĠĠĠĠ Ġval Ġstatus : ĠStatus , ĊĠĠĠĠĠĠĠ Ġval Ġtid : ĠString ? ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġenum Ġclass ĠStatus Ġ{ ĊĠĠĠĠĠĠĠ ĠAUTH ORIZ ED , ĠDECL IN ED , ĠFAILED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġauthorize ( payment Attempt Id : ĠString , Ġcard Info : ĠCard Info ): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġmap Of < String , ĠAny ? >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" reference " Ġto Ġpayment Attempt Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" card " Ġto Ġcard Info ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġweb Client ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri (" http :// localhost : 3 0 0 0 / gateway / authorize ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sync Body ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. retrieve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body To Mono < Result >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. await First () ĊĠĠĠ Ġ} Ċ Ċ }