package Ġno . nav . sy fo . sy k meld ing . api Ċ Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . auth . authentication Ċ import Ġio . ktor . auth . jwt . JWT Principal Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . routing . Route Ċ import Ġio . ktor . routing . get Ċ import Ġio . ktor . routing . route Ċ import Ġio . ktor . util . K tor Experimental API Ċ import Ġno . nav . sy fo . sy k meld ing . Sy k meld ing Service Ċ import Ġno . nav . sy fo . sy k meld ing status . api . v 1 . Status Event DTO Ċ import Ġjava . time . LocalDate Ċ Ċ @ K tor Experimental API Ċ fun ĠRoute . register Sy k meld ing Api ( sy k meld ing Service : ĠS yk meld ing Service ) Ġ{ ĊĠĠĠ Ġroute ("/ api / v 1 ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġget ("/ sy k meld inger ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġcall . request . headers [" Authorization "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprincipal : ĠJWT Principal Ġ= Ġcall . authentication . principal () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfn r Ġ= Ġprincipal . payload . subject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf om Ġ= Ġcall . parameters [" f om "] ?. let Ġ{ ĠLocalDate . parse ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtom Ġ= Ġcall . parameters [" tom "] ?. let Ġ{ ĠLocalDate . parse ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexclude Ġ= Ġcall . parameters . getAll (" exclude ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinclude Ġ= Ġcall . parameters . getAll (" include ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Exclude Include ( exclude , Ġinclude ) Ġ-> Ġcall . respond ( HttpStatusCode . BadRequest , Ġ" Can Ġnot Ġuse Ġboth Ġinclude Ġand Ġexclude ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck F om And Tom Date ( f om , Ġtom ) Ġ-> Ġcall . respond ( HttpStatusCode . BadRequest , Ġ" FO M Ġshould Ġbe Ġbefore Ġor Ġequal Ġto ĠTO M ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Invalid Status ( exclude Ġ?: Ġinclude ) Ġ-> Ġcall . respond ( HttpStatusCode . BadRequest , Ġ" include Ġor Ġexclude Ġcan Ġonly Ġcontain Ġ${ Status Event DTO . values (). join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcall . respond ( sy k meld ing Service . h ent Sy k meld inger ( fn r Ġ= Ġfn r , Ġtoken Ġ= Ġtoken , Ġapi Filter Ġ= ĠApi Filter ( f om Ġ= Ġf om , Ġtom Ġ= Ġtom , Ġexclude Ġ= Ġexclude , Ġinclude Ġ= Ġinclude ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ sy k meld inger /{ sy k meld ing id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsy k meld ing Id Ġ= Ġcall . parameters [" sy k meld ing id "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġcall . request . headers [" Authorization "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprincipal : ĠJWT Principal Ġ= Ġcall . authentication . principal () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfn r Ġ= Ġprincipal . payload . subject ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsy k meld ing Ġ= Ġsy k meld ing Service . h ent Sy k meld ing ( fn r , Ġtoken , Ġsy k meld ing Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sy k meld ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcall . respond ( sy k meld ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget ("/ sy forest / sy k meld inger ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġcall . request . headers [" Authorization "] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprincipal : ĠJWT Principal Ġ= Ġcall . authentication . principal () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfn r Ġ= Ġprincipal . payload . subject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar be id sg iver vis ning Ġ= Ġcall . parameters [" type "] Ġ== Ġ" ar be id sg iver " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( sy k meld ing Service . h ent Sy k meld inger Sy forest Format ( token Ġ= Ġtoken , Ġfn r Ġ= Ġfn r , Ġar be id sg iver vis ning Ġ= Ġar be id sg iver vis ning , Ġapi Filter Ġ= Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ private Ġfun Ġhas Invalid Status ( status Filter : ĠList < String >? ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġ! status Filter . isNull OrEmpty () Ġ&& Ġ! Status Event DTO . values (). map Ġ{ Ġit . name Ġ}. contains All ( status Filter ) Ċ } Ċ Ċ private Ġfun Ġcheck Exclude Include ( exclude : ĠList < String > ?, Ġinclude : ĠList < String >? ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġexclude Ġ!= Ġnull Ġ&& Ġinclude Ġ!= Ġnull Ċ } Ċ Ċ private Ġfun Ġcheck F om And Tom Date ( f om : ĠLocalDate ?, Ġtom : ĠLocalDate ?) Ġ= ĊĠĠĠ Ġf om Ġ!= Ġnull Ġ&& Ġtom Ġ!= Ġnull Ġ&& Ġtom . is Before ( f om ) Ċ