package Ġcom . rb k money . claim management api . util Ċ Ċ import Ġcom . rb k money . claim management api . exception . Deadline Exception Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . time . Instant Ċ import Ġkotlin . math . ceil Ċ Ċ @ Component Ċ class ĠDead line Checker Ġ{ ĊĊĠĠĠ Ġfun Ġcheck Deadline ( x Request Deadline : ĠString ?, Ġx RequestId : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Request Deadline Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( contains Relative Values ( x Request Deadline , Ġx RequestId )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= ĠInstant . parse ( x Request Deadline ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Instant . now (). is After ( instant )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDead line Exception (" Deadline Ġis Ġexpired , Ġx RequestId =$ x RequestId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDead line Exception (" Deadline Ġhas Ġinvalid Ġ' Instant ' Ġformat , Ġx RequestId =$ x RequestId ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontains Relative Values ( x Request Deadline : ĠString , Ġx RequestId : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġextract Minutes ( x Request Deadline , Ġx RequestId ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextract Seconds ( x Request Deadline , Ġx RequestId ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextract Milliseconds ( x Request Deadline , Ġx RequestId ) Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Minutes ( x Request Deadline : ĠString , Ġx RequestId : ĠString ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpart Ġ= Ġ" minutes " ĊĠĠĠĠĠĠĠ Ġcheck Negative Value ( x Request Deadline , Ġx RequestId , Ġminutes Negative Regex , Ġpart ) ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġextract Value ( x Request Deadline , Ġx RequestId , Ġminutes Regex , Ġpart ) ĊĠĠĠĠĠĠĠ Ġreturn Ġminutes ?. let Ġ{ Ġit . times ( 6 0 0 0 0 ). to Long () Ġ} Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Seconds ( x Request Deadline : ĠString , Ġx RequestId : ĠString ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpart Ġ= Ġ" seconds " ĊĠĠĠĠĠĠĠ Ġcheck Negative Value ( x Request Deadline , Ġx RequestId , Ġseconds Negative Regex , Ġpart ) ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġextract Value ( x Request Deadline , Ġx RequestId , Ġseconds Regex , Ġpart ) ĊĠĠĠĠĠĠĠ Ġreturn Ġseconds ?. let Ġ{ Ġit . times ( 1 0 0 0 ). to Long () Ġ} Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Milliseconds ( x Request Deadline : ĠString , Ġx RequestId : ĠString ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpart Ġ= Ġ" milliseconds " ĊĠĠĠĠĠĠĠ Ġcheck Negative Value ( x Request Deadline , Ġx RequestId , Ġmilliseconds Negative Regex , Ġpart ) ĊĠĠĠĠĠĠĠ Ġval Ġmilliseconds Ġ= Ġextract Value ( x Request Deadline , Ġx RequestId , Ġmilliseconds Regex , Ġpart ) ĊĠĠĠĠĠĠĠ Ġif Ġ( milliseconds Ġ!= Ġnull Ġ&& Ġceil ( milliseconds Ġ% Ġ 1 ) Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDead line Exception (" Deadline Ġ'$ part ' Ġparameter Ġcan Ġhave Ġonly Ġinteger Ġvalue , Ġx RequestId =$ x RequestId ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmilliseconds ?. to Long () Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Negative Value ( x Request Deadline : ĠString , Ġx RequestId : ĠString ?, Ġregex : ĠRegex , Ġpart : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Request Deadline . matches ( regex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDead line Exception (" Deadline Ġ'$ part ' Ġparameter Ġhas Ġnegative Ġvalue , Ġx RequestId =$ x RequestId ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Value ( ĊĠĠĠĠĠĠĠ Ġx Request Deadline : ĠString , ĊĠĠĠĠĠĠĠ Ġx RequestId : ĠString ?, ĊĠĠĠĠĠĠĠ Ġregex : ĠRegex , ĊĠĠĠĠĠĠĠ Ġpart : ĠString ĊĠĠĠ Ġ): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġregex . findAll ( x Request Deadline ). map Ġ{ Ġit . group Values Ġ}. flatten (). toList () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġgroups ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . matches ( number Regex ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDead line Exception (" Deadline Ġ'$ part ' Ġparameter Ġhas Ġa Ġfew Ġrelative Ġvalue , Ġx RequestId =$ x RequestId ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . first OrNull ()?. toDouble () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġminutes Regex Ġ= Ġ" (([ 0 - 9 ]+ ([ . ][ 0 - 9 ]+ )? )( ?! ms )[ m ]) ". to Regex () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġminutes Negative Regex Ġ= Ġ" ([- ][ 0 - 9 ]+ ([ . ][ 0 - 9 ]+ )? (? ! ms )[ m ]) ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġseconds Regex Ġ= Ġ" (([ 0 - 9 ]+ ([ . ][ 0 - 9 ]+ )? )[ s ]) ". to Regex () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġseconds Negative Regex Ġ= Ġ" ([- ][ 0 - 9 ]+ ([ . ][ 0 - 9 ]+ )? [ s ]) ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmilliseconds Regex Ġ= Ġ" (([ 0 - 9 ]+ ([ . ][ 0 - 9 ]+ )? )[ m ][ s ]) ". to Regex () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmilliseconds Negative Regex Ġ= Ġ" ([- ][ 0 - 9 ]+ ([ . ][ 0 - 9 ]+ )? [ m ][ s ]) ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnumber Regex Ġ= Ġ" ([ 0 - 9 ]+ ([ . ][ 0 - 9 ]+ )? ) ". to Regex () ĊĠĠĠ Ġ} Ċ } Ċ