package Ġio . def itr ack . market . pool ing Ċ Ċ import Ġio . def itr ack . network . to VO Ċ import Ġio . def itr ack . market . pool ing . domain . Pooling Element Ċ import Ġio . def itr ack . market . pool ing . vo . Pooling Position VO Ċ import Ġio . def itr ack . market . pool ing . vo . Pooling Market VO . Companion . to VO Ċ import Ġio . def itr ack . price . Price Request Ċ import Ġio . def itr ack . price . Price Resource Ċ import Ġio . def itr ack . protocol . to VO Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . web . bind . annotation . GetMapping Ċ import Ġorg . springframework . web . bind . annotation . PathVariable Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ Ċ @ RestController Ċ @ RequestMapping ("/ pool ing ") Ċ class ĠDefault User Pooling RestController ( ĊĠĠĠ Ġprivate Ġval Ġpooling Position Providers : ĠList < Pooling Position Provider >, ĊĠĠĠ Ġprivate Ġval Ġprice Resource : ĠPrice Resource Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĊĠĠĠ Ġ@ GetMapping ("/ { userId }/ positions ") ĊĠĠĠ Ġfun ĠgetUser Pool ings (@ PathVariable (" userId ") Ġaddress : ĠString ): ĠList < Pooling Position VO > Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġpooling Position Providers . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . user Pool ings ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Something Ġwent Ġwrong Ġtrying Ġto Ġfetch Ġthe Ġuser Ġpool ings : Ġ${ ex . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. await All (). flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġpooling Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpooling Element . to VO () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠPool ing Element . to VO (): ĠPool ing Position VO Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPool ing Position VO ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp Address Ġ= Ġlp Address , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdollar Value Ġ= Ġprice Resource . calculate Price ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrice Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp Address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Ġ= Ġnetwork . to VO (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Ġ= Ġsymbol , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotocol Ġ= Ġprotocol . to VO (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarket Ġ= Ġmarket . to VO () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }