package Ġnet . cord a . irs . api Ċ Ċ import Ġnet . cord a . client . rpc . not Used Ċ import Ġnet . cord a . core . contracts . filter States OfType Ċ import Ġnet . cord a . core . get OrThrow Ċ import Ġnet . cord a . core . messaging . C ord a RP CO ps Ċ import Ġnet . cord a . core . messaging . start Flow Ċ import Ġnet . cord a . core . utilities . logger For Ċ import Ġnet . cord a . irs . contract . Interest Rate Swap Ċ import Ġnet . cord a . irs . flows . Auto Offer Flow Ċ import Ġnet . cord a . irs . flows . Update Business Day Flow Ċ import Ġjava . net . URI Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġjavax . ws . rs .* Ċ import Ġjavax . ws . rs . core . MediaType Ċ import Ġjavax . ws . rs . core . Response Ċ Ċ /** Ċ Ġ* ĠThis Ġprovides Ġa Ġsimplified ĠAPI , Ġcurrently Ġfor Ġdemonstr ation Ġuse Ġonly . Ċ Ġ* Ċ Ġ* ĠIt Ġprovides Ġseveral ĠJSON ĠREST Ġcalls Ġas Ġfollows : Ċ Ġ* Ċ Ġ* ĠGET Ġ/ api / irs / de als Ġ- Ġreturns Ġan Ġarray Ġof Ġall Ġdeals Ġtracked Ġby Ġthe Ġwallet Ġof Ġthis Ġnode . Ċ Ġ* ĠGET Ġ/ api / irs / de als /{ ref } Ġ- Ġreturn Ġthe Ġdeal Ġreferenced Ġby Ġthe Ġextern ally Ġprovided Ġref ence Ġthat Ġwas Ġpreviously Ġuploaded . Ċ Ġ* ĠPOST Ġ/ api / irs / de als Ġ- ĠPayload Ġis Ġa ĠJSON Ġformatted Ġ[ Interest Rate Swap . State ] Ġcreate Ġa Ġnew Ġdeal Ġ( includes Ġan Ġextern ally Ġprovided Ġreference Ġfor Ġuse Ġabove ). Ċ Ġ* Ċ Ġ* ĠTODO : Ġwhere Ġwe Ġcurrently Ġrefer Ġto Ġsingular Ġexternal Ġdeal Ġreference , Ġof Ġcourse Ġthis Ġcould Ġeasily Ġbe Ġmultiple Ġidentifiers Ġe . g . ĠC US IP , ĠIS IN . Ċ Ġ* Ċ Ġ* ĠGET Ġ/ api / irs / de mod ate Ġ- Ġreturn Ġthe Ġcurrent Ġdate Ġas Ġviewed Ġby Ġthe Ġsystem Ġin ĠYYYY - MM - DD Ġformat . Ċ Ġ* ĠPUT Ġ/ api / irs / de mod ate Ġ- Ġput Ġdate Ġin Ġformat ĠYYYY - MM - DD Ġto Ġadvance Ġthe Ġcurrent Ġdate Ġas Ġviewed Ġby Ġthe Ġsystem Ġand Ċ Ġ* Ġsimulate Ġany Ġassociated Ġbusiness Ġprocessing Ġ( currently Ġfixing ). Ċ Ġ* Ċ Ġ* ĠTODO : Ġreplace Ġsimulated Ġdate Ġadvance ment Ġwith Ġbusiness Ġevent Ġbased Ġimplementation Ċ Ġ*/ Ċ @ Path (" irs ") Ċ class ĠInter est Rate Swap API ( val Ġrpc : ĠC ord a RP CO ps ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġlogger For < Interest Rate Swap API >() ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Deal Link ( deal : ĠInter est Rate Swap . State ) Ġ= Ġ"/ api / irs / de als /" Ġ+ Ġdeal . common . trade ID ĊĊĠĠĠ Ġprivate Ġfun Ġget Deal By Ref ( ref : ĠString ): ĠInter est Rate Swap . State ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( vault , Ġvault Updates ) Ġ= Ġrpc . vault And Updates () ĊĠĠĠĠĠĠĠ Ġvault Updates . not Used () ĊĠĠĠĠĠĠĠ Ġval Ġstates Ġ= Ġvault . filter States OfType < Interest Rate Swap . State >(). filter Ġ{ Ġit . state . data . ref Ġ== Ġref Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( states . isEmpty ()) Ġnull Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeals Ġ= Ġstates . map Ġ{ Ġit . state . data Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( de als . isEmpty ()) Ġnull Ġelse Ġdeals [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll De als (): ĠArray < Interest Rate Swap . State > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( vault , Ġvault Updates ) Ġ= Ġrpc . vault And Updates () ĊĠĠĠĠĠĠĠ Ġvault Updates . not Used () ĊĠĠĠĠĠĠĠ Ġval Ġstates Ġ= Ġvault . filter States OfType < Interest Rate Swap . State >() ĊĠĠĠĠĠĠĠ Ġval Ġsw aps Ġ= Ġstates . map Ġ{ Ġit . state . data Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġreturn Ġsw aps ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GET ĊĠĠĠ Ġ@ Path (" de als ") ĊĠĠĠ Ġ@ Produces ( MediaType . APPLICATION _ JSON ) ĊĠĠĠ Ġfun Ġfetch De als (): ĠArray < Interest Rate Swap . State > Ġ= ĠgetAll De als () ĊĊĠĠĠ Ġ@ POST ĊĠĠĠ Ġ@ Path (" de als ") ĊĠĠĠ Ġ@ Cons umes ( MediaType . APPLICATION _ JSON ) ĊĠĠĠ Ġfun Ġstore Deal ( new Deal : ĠInter est Rate Swap . State ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrpc . start Flow ( Auto Offer Flow :: Request er , Ġnew Deal ). returnValue . get OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . created ( URI . create ( generate Deal Link ( new Deal ))). build () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Exception Ġwhen Ġcreating Ġdeal : Ġ$ ex ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . status ( Response . Status . INTERNAL _ SERVER _ ERROR ). entity ( ex . toString ()). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GET ĊĠĠĠ Ġ@ Path (" de als /{ ref }") ĊĠĠĠ Ġ@ Produces ( MediaType . APPLICATION _ JSON ) ĊĠĠĠ Ġfun Ġfetch Deal (@ Path Param (" ref ") Ġref : ĠString ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeal Ġ= Ġget Deal By Ref ( ref ) ĊĠĠĠĠĠĠĠ Ġif Ġ( deal Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . status ( Response . Status . NOT _ FOUND ). build () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . ok (). entity ( deal ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PUT ĊĠĠĠ Ġ@ Path (" de mod ate ") ĊĠĠĠ Ġ@ Cons umes ( MediaType . APPLICATION _ JSON ) ĊĠĠĠ Ġfun Ġstore Demo Date ( new Demo Date : ĠLocalDate ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprior Demo Date Ġ= Ġfetch Demo Date () ĊĠĠĠĠĠĠĠ Ġ// ĠCan Ġonly Ġmove Ġdate Ġforwards ĊĠĠĠĠĠĠĠ Ġif Ġ( new Demo Date . is After ( prior Demo Date )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠRemove Ġthis Ġsuppress Ġwhen Ġwe Ġupgrade Ġto Ġkotlin Ġ 1 . 1 Ġor Ġwhen ĠJet Brain Ġfixes Ġthe Ġbug . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UNSUPPORTED _ FEATURE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrpc . start Flow ( Update Business Day Flow :: Broadcast , Ġnew Demo Date ). returnValue . get OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . ok (). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" de mod ate Ġis Ġalready Ġ$ prior Demo Date Ġand Ġcan Ġonly Ġbe Ġupdated Ġwith Ġa Ġlater Ġdate " ĊĠĠĠĠĠĠĠ Ġlogger . error (" Attempt Ġto Ġset Ġde mod ate Ġto Ġ$ new Demo Date Ġbut Ġ$ msg ") ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . status ( Response . Status . CONF LI CT ). entity ( msg ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GET ĊĠĠĠ Ġ@ Path (" de mod ate ") ĊĠĠĠ Ġ@ Produces ( MediaType . APPLICATION _ JSON ) ĊĠĠĠ Ġfun Ġfetch Demo Date (): ĠLocalDate Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLocalDateTime . of Instant ( rpc . currentNode Time (), ĠZone Id . system Default ()). to LocalDate () ĊĠĠĠ Ġ} Ċ } Ċ