package Ġno . nav . s bl . dialog arena . min inn bo ks . consumer Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Properties Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġcom . fasterxml . jackson . databind . Java Type Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . call .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . client . statement .* Ċ import Ġio . ktor . http .* Ċ import Ġno . nav . common . auth . subject . Subject Ċ import Ġno . nav . common . log . M DC Constants Ċ import Ġno . nav . common . utils . Id Utils Ċ import Ġno . nav . s bl . dialog arena . min inn bo ks . Jack son Utils Ċ import Ġno . nav . s bl . dialog arena . min inn bo ks . common . T jen est ek all Logger Ċ import Ġno . nav . s bl . dialog arena . min inn bo ks . external Call Ċ import Ġorg . slf 4 j . M DC Ċ Ċ @ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) Ċ @ JsonInclude ( JsonInclude . Include . NON _ NULL ) Ċ data Ġclass ĠGraph Q LError ( ĊĠĠĠ Ġval Ġmessage : ĠString , ĊĠĠĠ Ġval Ġlocations : ĠList < Source Location >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġpath : ĠList < Any >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġextensions : ĠMap < String , ĠAny ?> ? Ġ= Ġnull Ċ ) Ċ Ċ @ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) Ċ @ JsonInclude ( JsonInclude . Include . NON _ NULL ) Ċ data Ġclass ĠSource Location ( ĊĠĠĠ Ġval Ġline : ĠInt , ĊĠĠĠ Ġval Ġcolumn : ĠInt Ċ ) Ċ Ċ @ JsonIgnore Properties ( ignore Unknown Ġ= Ġtrue ) Ċ @ JsonInclude ( JsonInclude . Include . NON _ NULL ) Ċ data Ġclass ĠGraphQL Response < DATA >( ĊĠĠĠ Ġval Ġdata : ĠDATA ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġerrors : ĠList < Graph Q LError >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġextensions : ĠMap < String , ĠAny ?> ? Ġ= Ġnull Ċ ) Ċ Ċ interface ĠGraphQL Variables Ċ interface ĠGraphQL Result Ċ Ċ interface ĠGraphQL Request < VARIABLE S Ġ: ĠGraphQL Variables , ĠRETURN _ TYPE Ġ: ĠGraphQL Result > Ġ{ ĊĠĠĠ Ġval Ġquery : ĠString ĊĠĠĠ Ġval Ġvariables : ĠVARIABLE S ĊĊĠĠĠ Ġ@ get : JsonIgnore ĊĠĠĠ Ġval Ġexpected ReturnType : ĠClass < RETURN _ TYPE > Ċ } Ċ Ċ data Ġclass ĠGraphQL ClientConfig ( ĊĠĠĠ Ġval Ġt jen este Nav n : ĠString , ĊĠĠĠ Ġval Ġrequest Config : Ġsuspend ĠHttpRequest Builder .( call Id : ĠString , Ġsubject : ĠSubject ) Ġ-> ĠUnit Ċ ) Ċ Ċ class ĠGraphQL Client ( ĊĠĠĠ Ġprivate Ġval Ġconfig : ĠGraphQL ClientConfig , ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠHttpClient Ċ ) Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġ< VARS Ġ: ĠGraphQL Variables , ĠDATA Ġ: ĠGraphQL Result , ĠREQUEST Ġ: ĠGraphQL Request < VARS , ĠDATA >> Ġexecute ( ĊĠĠĠĠĠĠĠ Ġsubject : ĠSubject , ĊĠĠĠĠĠĠĠ Ġrequest : ĠREQUEST ĊĠĠĠ Ġ): ĠGraphQL Response < DATA > Ġ= Ġexternal Call ( subject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall Id Ġ= ĠM DC . get ( M DC Constants . M DC _ CALL _ ID ) Ġ?: ĠId Utils . generate Id () ĊĠĠĠĠĠĠĠ Ġval ĠrequestId Ġ= ĠId Utils . generate Id () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT jen est ek all Logger . info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ config . t jen este Nav n }- request : Ġ$ call Id Ġ($ requestId )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" subject " Ġto Ġsubject . uid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" request " Ġto Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠhttpResponse : ĠHttpResponse Ġ= ĠhttpClient . request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . request Config . invoke ( this , Ġcall Id , Ġsubject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody : ĠString Ġ= ĠhttpResponse . receive () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Reference : ĠJava Type Ġ= ĠJack son Utils . object Mapper . type Factory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. construct Parame tric Type ( GraphQL Response :: class . java , Ġrequest . expected ReturnType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠJack son Utils . object Mapper . readValue < GraphQL Response < DATA >>( body , Ġtype Reference ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt jen est ek all F el ter Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto ĠhttpResponse . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġresponse . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" errors " Ġto Ġresponse . errors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . errors ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT jen est ek all Logger . error ("${ config . t jen este Nav n }- response - error : Ġ$ call Id Ġ($ requestId )", Ġt jen est ek all F el ter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Messages Ġ= Ġresponse . errors . join ToString (", Ġ") Ġ{ Ġit . message Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( error Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT jen est ek all Logger . info ("${ config . t jen este Nav n }- response : Ġ$ call Id Ġ($ requestId )", Ġt jen est ek all F el ter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ external Call Ġresponse ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT jen est ek all Logger . error ("${ config . t jen este Nav n }- response - error : Ġ$ call Id Ġ($ requestId )", Ġmap Of (" exception " Ġto Ġexception )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġlast Query F ra Fil ( source : ĠString , Ġname : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGraphQL Client :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource ("/ $ source /$ name . graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("[ \ n \ r ]", Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ