package Ġno . nav . sy fo . predi ks jon . api Ċ Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġno . nav . sy fo . til gang sk ont roll . M idl ert id ig Til gang s S je kk Ċ import Ġno . nav . sy fo . application . api . authentication . get NAV Ident From Token Ċ import Ġno . nav . sy fo . clients . til gang sk ont roll . Til gang sk ont roll Ċ import Ġno . nav . sy fo . application . database . Database Interface Ċ import Ġno . nav . sy fo . domain . F od se ls nummer Ċ import Ġno . nav . sy fo . metric . COUNT _ PRE DI KS J ON _ OUTPUT _ ERROR Ċ import Ġno . nav . sy fo . metric . COUNT _ PRE DI KS J ON _ OUTPUT _ FAILED Ċ import Ġno . nav . sy fo . metric . COUNT _ PRE DI KS J ON _ OUTPUT _ FOR BID DEN Ċ import Ġno . nav . sy fo . metric . COUNT _ PRE DI KS J ON _ OUTPUT _ SUCCESS Ċ import Ġno . nav . sy fo . predi ks jon . get Pred iks jon Ċ import Ġno . nav . sy fo . predi ks jon . to Pred iks jon Frontend Ċ import Ġno . nav . sy fo . util . NAV _ PERSON IDENT _ HEADER Ċ import Ġno . nav . sy fo . util . get Call Id Ċ import Ġno . nav . sy fo . util . latest Pred iks jon Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ private Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger (" no . nav . sy fo . application . api ") Ċ Ċ const Ġval Ġapi V 2 BasePath Ġ= Ġ"/ api / v 2 " Ċ const Ġval Ġapi V 2 Pred iks jon Path Ġ= Ġ"/ predi ks jon " Ċ Ċ fun ĠRoute . register Pred iks jon Api V 2 ( ĊĠĠĠ Ġdatabase : ĠDatabase Interface , ĊĠĠĠ Ġtil gang sk ont roll : ĠT il gang sk ont roll , ĊĠĠĠ Ġmid l ert id ig Til gang s S je kk : ĠM idl ert id ig Til gang s S je kk , Ċ ) Ġ{ ĊĠĠĠ Ġroute ( api V 2 BasePath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget ( api V 2 Pred iks jon Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Id Ġ= Ġget Call Id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġcall . request . headers [ HttpHeaders . Authorization ]?. remove Prefix (" Bearer Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" No ĠAuthorization Ġheader Ġsupplied ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Fn r Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . request . headers [ NAV _ PERSON IDENT _ HEADER ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" No ĠPerson Ident Ġsupplied ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtil gang Ġ= Ġtil gang sk ont roll . har Til gang Til B ru ker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Id Ġ= Ġcall Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperson Ident Number Ġ= ĠF od se ls nummer ( request Fn r ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġve ile der Has Beta Access Ġ= Ġmid l ert id ig Til gang s S je kk . har Til gang ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Ident Ġ= Ġget NAV Ident From Token ( token ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( til gang Ġ&& Ġve ile der Has Beta Access ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpred Ġ= Ġdatabase . get Pred iks jon ( F od se ls nummer ( request Fn r )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pred . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . No Content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatest Pred iks jon Ġ= Ġpred . latest Pred iks jon () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrontend Pred iks jon Ġ= Ġlatest Pred iks jon . to Pred iks jon Frontend () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( frontend Pred iks jon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOUNT _ PRE DI KS J ON _ OUTPUT _ SUCCESS . inc () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOUNT _ PRE DI KS J ON _ OUTPUT _ FOR BID DEN . inc () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . Forbidden ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġillegal Argument Message Ġ= Ġ" Could Ġnot Ġretrieve ĠPred iks jon List Ġfor ĠPerson Ident " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ("$ il legal Argument Message : Ġ{}", Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOUNT _ PRE DI KS J ON _ OUTPUT _ FAILED . inc () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest , Ġe . message Ġ?: Ġillegal Argument Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġ" An Ġunexpected Ġexception Ġoccurred " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( errorMessage , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOUNT _ PRE DI KS J ON _ OUTPUT _ ERROR . inc () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . InternalServerError , ĠerrorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ