/* Ċ Ġ* ĠCopyright ĠD 3 ĠLed ger , ĠInc . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġcom . d 3 . datac ol lect or . controllers Ċ Ċ import Ġcom . d 3 . datac ol lect or . model . Asset Rate Ċ import Ġcom . d 3 . datac ol lect or . model . String Wrapper Ċ import Ġcom . d 3 . datac ol lect or . repository . Rates Repository Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . stereotype . Controller Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjava . math . BigDecimal Ċ Ċ /** Ċ Ġ* ĠController Ġfor Ġendpoints Ġrelated Ġto Ġasset Ġexchange Ġrates Ċ Ġ*/ Ċ @ Cross Origin ( orig ins Ġ= Ġ[" * "], Ġallow Credentials Ġ= Ġ" true ", Ġallowed Headers Ġ= Ġ[" * "]) Ċ @ Controller Ċ @ RequestMapping ("/ rates ") Ċ class ĠR ates Controller ( ĊĠĠĠ Ġprivate Ġval Ġasset Rates Repository : ĠR ates Repository , ĊĠĠĠ Ġ@ Value ("\ ${ server . pass phrase }") ĊĠĠĠ Ġprivate Ġval Ġpassphrase : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGET Ġendpoint Ġfor Ġquerying Ġan Ġexchange Ġrate Ġof Ġthe Ġasset Ġspecified ĊĠĠĠĠ Ġ* Ġ@ param Ġasset Name ĠI ro ha Ġname Ġof Ġthe Ġasset ĊĠĠĠĠ Ġ* Ġ@ param Ġasset Domain ĠI ro ha Ġdomain Ġof Ġthe Ġasset ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String Wrapper ] Ġwith Ġdecimal Ġexchange Ġrate Ġor Ġwith Ġerrors Ġif Ġthey Ġoccur ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ { asset Name }/{ asset Domain }") ĊĠĠĠ Ġfun Ġget Rate ( ĊĠĠĠĠĠĠĠ Ġ@ PathVariable (" asset Name ") Ġasset Name : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ PathVariable (" asset Domain ") Ġasset Domain : ĠString ĊĠĠĠ Ġ): ĠResponseEntity < String Wrapper > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Id Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% s # % s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasset Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasset Domain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Ġ= Ġasset Rates Repository . findById ( asset Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( asset . isPresent Ġ&& Ġ! asset . get (). rate . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . ok ( String Wrapper ( asset . get (). rate )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Asset Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠString Wrapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . fill ( Dc Exception Status . AS SET _ NOT _ FOUND , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . ok ( response ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠString Wrapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . fill ( Dc Exception Status . UNKNOWN _ ERROR , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . status ( HttpStatus . INTERNAL _ SERVER _ ERROR ). body ( response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPOST Ġendpoint Ġfor Ġsetting Ġan Ġexchange Ġrate Ġof Ġthe Ġasset Ġspecified ĊĠĠĠĠ Ġ* Ġ@ param Ġset Rate DTO ĠJSON ed Ġbody Ġwith Ġasset Ġname , Ġdomain Ġand Ġrate ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String Wrapper ] Ġwith Ġdecimal Ġexchange Ġrate Ġor Ġwith Ġerrors Ġif Ġthey Ġoccur ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ PostMapping ("", Ġconsume s Ġ= Ġ[" application / json "]) ĊĠĠĠ Ġfun Ġset Rate ( ĊĠĠĠĠĠĠĠ Ġ@ RequestBody Ġset Rate DTO : ĠSet Rate DTO ĊĠĠĠ Ġ): ĠResponseEntity < String Wrapper > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( set Rate DTO . pass phrase Ġ!= Ġpassphrase ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal AccessException (" Wrong Ġpassphrase ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Id Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% s # % s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Rate DTO . asset Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Rate DTO . asset Domain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġcheck Ġnumber Ġformat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Rate Ġ= ĠBigDecimal ( set Rate DTO . asset Rate ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Asset Record Ġ= Ġasset Rates Repository . findById ( asset Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Asset Record : ĠAsset Rate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Asset Record Ġ= Ġif Ġ( current Asset Record . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Asset Record . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAsset Rate ( asset Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Asset Record . rate Ġ= Ġasset Rate . to Plain String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset Rates Repository . save ( new Asset Record ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . ok ( String Wrapper ( set Rate DTO . asset Rate )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠString Wrapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . fill ( Dc Exception Status . UNKNOWN _ ERROR , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . status ( HttpStatus . INTERNAL _ SERVER _ ERROR ). body ( response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠSet Rate DTO ( ĊĠĠĠ Ġval Ġasset Name : ĠString , ĊĠĠĠ Ġval Ġasset Domain : ĠString , ĊĠĠĠ Ġval Ġasset Rate : ĠString , ĊĠĠĠ Ġ// ĠTODO Ġchange Ġto Ġsecurity / auth ĊĠĠĠ Ġval Ġpassphrase : ĠString Ċ ) Ċ