package Ġno . nav . sy fo Ċ Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . HttpClient Config Ċ import Ġio . ktor . client . engine . apache . Apache Ċ import Ġio . ktor . client . engine . apache . Apache Engine Config Ċ import Ġio . ktor . client . plugins . HttpResponse Validator Ċ import Ġio . ktor . client . plugins . content neg otiation . Content Neg otiation Ċ import Ġio . ktor . network . sockets . Socket TimeoutException Ċ import Ġio . ktor . serialization . jackson . jackson Ċ import Ġio . prometheus . client . hot spot . Default Exports Ċ import Ġkotlinx . coroutines . Del icate Cor outines Api Ċ import Ġno . nav . sy fo . application . Application Server Ċ import Ġno . nav . sy fo . application . Application State Ċ import Ġno . nav . sy fo . application . create Application Engine Ċ import Ġno . nav . sy fo . azure ad . AccessToken Client Ċ import Ġno . nav . sy fo . common . delete . Delete Data Db Ċ import Ġno . nav . sy fo . common . delete . Delete DataService Ċ import Ġno . nav . sy fo . common . exception . Service Unavailable Exception Ċ import Ġno . nav . sy fo . common . kafka . Common Kafka Service Ċ import Ġno . nav . sy fo . database . G cp Database Ċ import Ġno . nav . sy fo . database . G cp Database Credentials Ċ import Ġno . nav . sy fo . hen del ser . H en del ser Service Ċ import Ġno . nav . sy fo . hen del ser . db . H en del ser Db Ċ import Ġno . nav . sy fo . kafka . a iven . Kafka Utils Ċ import Ġno . nav . sy fo . kafka . to Consumer Config Ċ import Ġno . nav . sy fo . nar me ste le der . N ar me ste le der Service Ċ import Ġno . nav . sy fo . nar me ste le der . db . N ar me ste le der Db Ċ import Ġno . nav . sy fo . so kn ad . S ok nad Service Ċ import Ġno . nav . sy fo . so kn ad . db . S ok nad Db Ċ import Ġno . nav . sy fo . sy ket il f elle . client . Sy fo Sy ket il f elle Client Ċ import Ġno . nav . sy fo . sy k meld ing . Sy k meld ing Service Ċ import Ġno . nav . sy fo . sy k meld ing . db . Sy k meld ing Db Ċ import Ġno . nav . sy fo . sy k meld ing . p dl . client . P dl Client Ċ import Ġno . nav . sy fo . sy k meld ing . p dl . service . P dl Person Service Ċ import Ġorg . apache . kafka . clients . consumer . Consumer Config Ċ import Ġorg . apache . kafka . clients . consumer . Kafka Consumer Ċ import Ġorg . apache . kafka . common . serialization . String Deserializer Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġkotlin . collections . set Ċ import Ġkotlin . time . Experimental Time Ċ Ċ val Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger (" no . nav . sy fo . d ines yk meld te - kafka ") Ċ val ĠobjectMapper : ĠObjectMapper Ġ= ĠObjectMapper (). apply Ġ{ ĊĠĠĠ Ġregister Kotlin Module () ĊĠĠĠ Ġregister Module ( Java Time Module ()) ĊĠĠĠ Ġconfigure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠ Ġconfigure ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S , Ġfalse ) Ċ } Ċ Ċ @ Experimental Time Ċ @ Del icate Cor outines Api Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġenv Ġ= ĠEnvironment () ĊĠĠĠ ĠDefault Exports . initialize () ĊĠĠĠ Ġval Ġapplication State Ġ= ĠApplication State () ĊĠĠĠ Ġval Ġapplication Engine Ġ= Ġcreate Application Engine ( ĊĠĠĠĠĠĠĠ Ġenv , ĊĠĠĠĠĠĠĠ Ġapplication State ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġapplication Server Ġ= ĠApplication Server ( application Engine , Ġapplication State ) ĊĠĠĠ Ġapplication Server . start () ĊĠĠĠ Ġval Ġconfig : ĠHttpClient Config < Apache Engine Config >. () Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj ack son Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Kotlin Module () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠHttpResponse Validator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Response Exception With Request Ġ{ Ġexception , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSocket TimeoutException Ġ-> Ġthrow ĠService Unavailable Exception ( exception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval ĠhttpClient Ġ= ĠHttpClient ( Apache , Ġconfig ) ĊĠĠĠ Ġval ĠaccessToken Client Ġ= ĠAccess Token Client ( env . aad AccessToken Url , Ġenv . clientId , Ġenv . client Secret , ĠhttpClient ) ĊĠĠĠ Ġval Ġp dl Client Ġ= ĠP dl Client ( ĊĠĠĠĠĠĠĠ ĠhttpClient , ĊĠĠĠĠĠĠĠ Ġenv . p dl Graph ql Path , ĊĠĠĠĠĠĠĠ ĠP dl Client :: class . java . getResource ("/ graphql / get Person . graphql "). read Text (). replace ( Regex ("[ \ n \ t ] "), Ġ"") ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġp dl Person Service Ġ= ĠP dl Person Service ( p dl Client , ĠaccessToken Client , Ġenv . p dl Scope ) ĊĊĠĠĠ Ġval Ġsy fo Sy ket il f elle Client Ġ= ĠSy fo Sy ket il f elle Client ( ĊĠĠĠĠĠĠĠ Ġsy ket il f elle Endpoint URL Ġ= Ġenv . sy ket il f elle Endpoint URL , ĊĠĠĠĠĠĠĠ ĠaccessToken Client Ġ= ĠaccessToken Client , ĊĠĠĠĠĠĠĠ Ġsy ket il f elle Scope Ġ= Ġenv . sy ket il f elle Scope , ĊĠĠĠĠĠĠĠ ĠhttpClient Ġ= ĠhttpClient ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġkafka Consumer Ġ= ĠKafka Consumer ( ĊĠĠĠĠĠĠĠ ĠKafka Utils . get A iven Kafka Config (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Consumer Config . AUTO _ OFFSET _ RESET _ CONFIG ] Ġ= Ġ" none " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Consumer Config . MAX _ POLL _ RECORD S _ CONFIG ] Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġ}. to Consumer Config (" d ines yk meld te - backend ", ĠString Deserializer :: class ), ĊĠĠĠĠĠĠĠ ĠString Deserializer (), ĊĠĠĠĠĠĠĠ ĠString Deserializer () ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġcredentials : ĠG cp Database Credentials Ġ= ĠobjectMapper . readValue ( getFile AsString ("/ run / secrets / secret ")) ĊĠĠĠ Ġval Ġdatabase Ġ= ĠG cp Database ( credentials , Ġ" d ines yk meld te - backend ") ĊĊĠĠĠ Ġval Ġn ar me ste le der Service Ġ= ĠN ar me ste le der Service ( N ar me ste le der Db ( database ), ) ĊĠĠĠ Ġval Ġsy k meld ing Service Ġ= ĠS yk meld ing Service ( Sy k meld ing Db ( database ), Ġp dl Person Service , Ġsy fo Sy ket il f elle Client , Ġenv . cluster ) ĊĠĠĠ Ġval Ġs ok nad Service Ġ= ĠS ok nad Service ( S ok nad Db ( database )) ĊĠĠĠ Ġval Ġh en del ser Service Ġ= ĠHen del ser Service ( H en del ser Db ( database )) ĊĊĠĠĠ Ġval Ġcommon Kafka Service Ġ= ĠCommon Kafka Service ( ĊĠĠĠĠĠĠĠ Ġkafka Consumer , ĊĠĠĠĠĠĠĠ Ġapplication State , ĊĠĠĠĠĠĠĠ Ġenv , ĊĠĠĠĠĠĠĠ Ġn ar me ste le der Service , ĊĠĠĠĠĠĠĠ Ġsy k meld ing Service , ĊĠĠĠĠĠĠĠ Ġs ok nad Service , ĊĠĠĠĠĠĠĠ Ġh en del ser Service ĊĠĠĠ Ġ) ĊĠĠĠ Ġapplication State . ready Ġ= Ġtrue ĊĠĠĠ Ġcommon Kafka Service . start Consumer () ĊĠĠĠ ĠDelete DataService ( Delete Data Db ( database ), Ġapplication State ). start () Ċ } Ċ