package Ġno . nav . k 9 p uns j . rest . ek ster nt . p uns jb ol len Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . github . kit tin un f . fuel . core . Response Ċ import Ġcom . github . kit tin un f . fuel . core . is Successful Ċ import Ġcom . github . kit tin un f . fuel . coroutines . await String Response Result Ċ import Ġcom . github . kit tin un f . fuel . http Post Ċ import Ġno . nav . hel se . d us se ld or f . oauth 2 . client . AccessToken Client Ċ import Ġno . nav . hel se . d us se ld or f . oauth 2 . client . Cached AccessToken Client Ċ import Ġno . nav . k 9 . s Ã¸ kn ad . S Ã¸ kn ad Ċ import Ġno . nav . k 9 p uns j . Correlation Id Ċ import Ġno . nav . k 9 p uns j . Standard Pro fil Ċ import Ġno . nav . k 9 p uns j . ab ac . Nav Headers Ċ import Ġno . nav . k 9 p uns j . dom enet jen ester . Person Service Ċ import Ġno . nav . k 9 p uns j . in ns ending . In ns ending Client . Companion . som Map Ċ import Ġno . nav . k 9 p uns j . object Mapper Ċ import Ġno . nav . k 9 p uns j . rest . web . dto . Journal post Id Dto Ċ import Ġno . nav . k 9 p uns j . rest . web . dto . N ors k Ident Dto Ċ import Ġno . nav . k 9 p uns j . rest . web . dto . Per i ode Dto Ċ import Ġno . nav . k 9 p uns j . rest . web . dto . S aks nummer Dto Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Qualifier Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġjava . net . URI Ċ import Ġjava . time . LocalDate Ċ Ċ @ Configuration Ċ @ Standard Pro fil Ċ class ĠRest P uns jb ol le Service ( ĊĠĠĠ Ġ@ Value ("\ ${ no . nav . k 9 p uns jb ol le . base _ url }") Ġprivate Ġval ĠbaseUrl : ĠURI , ĊĠĠĠ Ġ@ Value ("\ ${ no . nav . k 9 p uns jb ol le . scope }") Ġprivate Ġval Ġscope : ĠString , ĊĠĠĠ Ġ@ Qualifier (" azure ") Ġprivate Ġval ĠaccessToken Client : ĠAccess Token Client , ĊĠĠĠ Ġprivate Ġval Ġperson Service : ĠPerson Service , Ċ ) Ġ: ĠP uns jb ol le Service Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcached AccessToken Client Ġ= ĠCached AccessToken Client ( accessToken Client ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġopp rett E ller H ent F ags aks nummer ( ĊĠĠĠĠĠĠĠ Ġs Ã¸ ker : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġb arn : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġjournal post Id : ĠJournal post Id Dto ?, ĊĠĠĠĠĠĠĠ Ġper i ode : ĠPer i ode Dto ?, ĊĠĠĠĠĠĠĠ Ġcorrelation Id : ĠCorre lation Id ĊĠĠĠ Ġ): ĠS aks nummer Dto Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġp uns jb ol le S aks nummer Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ ker Ġ= Ġs Ã¸ ker , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb arn Ġ= Ġb arn , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal post Id Ġ= Ġjournal post Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper i ode Ġ= Ġper i ode ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( url , Ġresponse , Ġresponse Body ) Ġ= Ġ" s aks nummer ". post ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Ġ= Ġrequest Body , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorrelation Id Ġ= Ġcorrelation Id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fe il Ġved Ġopp rett E ller H ent F ags aks nummer . ĠUrl = [$ url ], ĠHttpStatus =[ ${ response . statusCode }], ĠResponse =$ response Body " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse Body . de serial iser () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġopp rett E ller H ent F ags aks nummer ( ĊĠĠĠĠĠĠĠ Ġs Ã¸ ker : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġb arn : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġs Ã¸ kn ad : ĠS Ã¸ kn ad , ĊĠĠĠĠĠĠĠ Ġcorrelation Id : ĠCorre lation Id ĊĠĠĠ Ġ): ĠS aks nummer Dto Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġp uns jb ol le S aks nummer F ra S Ã¸ kn ad Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ ker Ġ= Ġs Ã¸ ker , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb arn Ġ= Ġb arn , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ kn ad Ġ= Ġs Ã¸ kn ad ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( url , Ġresponse , Ġresponse Body ) Ġ= Ġ" s aks nummer - f ra - s Ã¸ kn ad ". post ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Ġ= Ġrequest Body , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorrelation Id Ġ= Ġcorrelation Id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fe il Ġved Ġopp rett E ller H ent F ags aks nummer . ĠUrl = [$ url ], ĠHttpStatus =[ ${ response . statusCode }], ĠResponse =$ response Body " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse Body . de serial iser () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġr uting ( ĊĠĠĠĠĠĠĠ Ġs Ã¸ ker : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġb arn : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġjournal post Id : ĠJournal post Id Dto ?, ĊĠĠĠĠĠĠĠ Ġper i ode : ĠPer i ode Dto ?, ĊĠĠĠĠĠĠĠ Ġcorrelation Id : ĠCorre lation Id ĊĠĠĠ Ġ): ĠP uns jb ol le R uting Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġp uns jb ol le S aks nummer Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ ker Ġ= Ġs Ã¸ ker , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb arn Ġ= Ġb arn , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal post Id Ġ= Ġjournal post Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper i ode Ġ= Ġper i ode ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( url , Ġresponse , Ġresponse Body ) Ġ= Ġ" r uting ". post ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Ġ= Ġrequest Body , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorrelation Id Ġ= Ġcorrelation Id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr uting Response Ġ: ĠR uting Response Ġ= Ġresponse Body . de serial iser () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . statusCode Ġ== Ġ 2 0 0 Ġ&& Ġr uting Response . dest inas jon Ġ== Ġ" K 9 S ak " Ġ-> ĠP uns jb ol le R uting . K 9 S ak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . statusCode Ġ== Ġ 2 0 0 Ġ&& Ġr uting Response . dest inas jon Ġ== Ġ" Info try gd " Ġ-> ĠP uns jb ol le R uting . Info try gd ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . statusCode Ġ== Ġ 4 0 9 Ġ&& Ġr uting Response . type Ġ== Ġ" p uns jb ol le :// ik ke - st Ã¸ tt et - journal post " Ġ-> ĠP uns jb ol le R uting . Ik ke St Ã¸ tt et . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Ik ke Ġst Ã¸ tt et Ġjournal post Ġved Ġr uting . ĠResponse =$ response Body ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Fe il Ġved Ġr uting . ĠUrl = [$ url ], ĠHttpStatus =[ ${ response . statusCode }], ĠResponse =$ response Body ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġp uns jb ol le S aks nummer Dto ( ĊĠĠĠĠĠĠĠ Ġs Ã¸ ker : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġb arn : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġjournal post Id : ĠJournal post Id Dto ?, ĊĠĠĠĠĠĠĠ Ġper i ode : ĠPer i ode Dto ?) Ġ: ĠP uns jb ol le S aks nummer Dto Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ã¸ ker Person Ġ= Ġperson Service . fin n E ller Opp rett Person V ed N ors k Ident ( s Ã¸ ker ) ĊĠĠĠĠĠĠĠ Ġval Ġb arn Person Ġ= Ġperson Service . fin n E ller Opp rett Person V ed N ors k Ident ( bar n ) ĊĠĠĠĠĠĠĠ Ġreturn ĠP uns jb ol le S aks nummer Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ ker Ġ= ĠP uns jb ol le Person Dto ( s Ã¸ ker Person . n ors k Ident , Ġs Ã¸ ker Person . akt Ã¸ r Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġple iet reng ende Ġ= ĠP uns jb ol le Person Dto ( bar n Person . n ors k Ident , Ġb arn Person . akt Ã¸ r Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper i ode Ġ= Ġper i ode ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . f om Ġ!= Ġnull Ġ|| Ġit . tom Ġ!= Ġnull ) Ġ{ Ġ" M Ã¥ Ġset te Ġent en Ġf om Ġeller Ġtom " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . f om . iso 8 6 0 1 () }/${ it . tom . iso 8 6 0 1 () }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ kn ad stype Ġ= Ġ" P le i ep enger Sy kt B arn ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjournal post Id Ġ= Ġjournal post Id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġp uns jb ol le S aks nummer F ra S Ã¸ kn ad Dto ( ĊĠĠĠĠĠĠĠ Ġs Ã¸ ker : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġb arn : ĠN ors k Ident Dto , ĊĠĠĠĠĠĠĠ Ġs Ã¸ kn ad : ĠS Ã¸ kn ad ĊĠĠĠ Ġ) Ġ: ĠP uns jb ol le S aks nummer F ra S Ã¸ kn ad Dto Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ã¸ ker Person Ġ= Ġperson Service . fin n E ller Opp rett Person V ed N ors k Ident ( s Ã¸ ker ) ĊĠĠĠĠĠĠĠ Ġval Ġb arn Person Ġ= Ġperson Service . fin n E ller Opp rett Person V ed N ors k Ident ( bar n ) ĊĠĠĠĠĠĠĠ Ġreturn ĠP uns jb ol le S aks nummer F ra S Ã¸ kn ad Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ ker Ġ= ĠP uns jb ol le Person Dto ( s Ã¸ ker Person . n ors k Ident , Ġs Ã¸ ker Person . akt Ã¸ r Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġple iet reng ende Ġ= ĠP uns jb ol le Person Dto ( bar n Person . n ors k Ident , Ġb arn Person . akt Ã¸ r Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Ã¸ kn ad Ġ= Ġs Ã¸ kn ad . som Map () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠString . post ( ĊĠĠĠĠĠĠĠ Ġrequest Body : ĠAny , ĊĠĠĠĠĠĠĠ Ġcorrelation Id : ĠCorre lation Id ) Ġ: ĠTrip le < URI , ĠResponse , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURI ("${ baseUrl }/ $ this ") ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġresponse , Ġresult ) Ġ= Ġ"$ url " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. http Post () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( object Mapper (). serial iser ( request Body )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . ACCEPT Ġto Ġ" application / json ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . AUTHORIZATION Ġto Ġcached AccessToken Client . get AccessToken ( set Of ( scope )). as Author iation Header (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . CONTENT _ TYPE Ġto Ġ" application / json ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Headers . X Correlation Id Ġto Ġcorrelation Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). await String Response Result () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresult . fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsuccess Ġ-> Ġsuccess Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġwhen Ġ( error . response . body (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ"{} " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠString ( error . response . body (). toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( url , Ġresponse , Ġresponse Body ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠLocalDate ?. iso 8 6 0 1 () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ".. " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"$ this " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > ĠObjectMapper . serial iser ( value : ĠT ): ĠString Ġ= Ġwrite Value AsString ( value ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT > String . de serial iser () Ġ= Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper (). readValue < T >( this ) ĊĠĠĠĠĠĠĠ Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Fe il Ġved Ġde serial is ering Ġav ĠResponse =$ this ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġdata Ġclass ĠP uns jb ol le Person Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġident it ets nummer : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġakt Ã¸ r Id : ĠString , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġdata Ġclass ĠP uns jb ol le S aks nummer Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ã¸ ker : ĠP uns jb ol le Person Dto , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġple iet reng ende : ĠP uns jb ol le Person Dto , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ã¸ kn ad stype : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjournal post Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġper i ode : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ Ġrequire ( journal post Id Ġ!= Ġnull Ġ|| Ġper i ode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" M Ã¥ Ġset te Ġmin st Ġen Ġav Ġjournal post Id Ġog Ġper i ode " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġdata Ġclass ĠP uns jb ol le S aks nummer F ra S Ã¸ kn ad Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ã¸ ker : ĠP uns jb ol le Person Dto , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġple iet reng ende : ĠP uns jb ol le Person Dto , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ã¸ kn ad : ĠMap < String , Ġ*> ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġdata Ġclass ĠR uting Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest inas jon : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Rest P uns jb ol le Service :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ