package Ġno . ve g ves en . saga . modules . gcp . functions Ċ Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . flatMap Ċ import Ġcom . google . cloud . functions . Http Function Ċ import Ġcom . google . cloud . functions . HttpRequest Ċ import Ġcom . google . cloud . functions . HttpResponse Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . serialization . Deserialization Strategy Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġno . ve g ves en . saga . modules . shared . Logging Ċ import Ġno . ve g ves en . saga . modules . shared . env OrThrow Ċ import Ġno . ve g ves en . saga . modules . shared . log Ċ import Ġno . ve g ves en . saga . modules . shared . v Ċ import Ġjava . net . Http URLConnection Ċ Ċ @ Experimental Serialization Api Ċ abstract Ġclass ĠG cp Http Function With Params < T Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġde serializer : ĠDeserial ization Strategy < T >, ĊĠĠĠ Ġprivate Ġval Ġprocess : Ġsuspend Ġ( params : ĠT ) Ġ-> ĠEither < Throwable , ĠUnit > Ċ ) Ġ: ĠHttp Function , ĠLogging Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfunction Name Ġ= Ġjava Class . simple Name ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠprojectId Ġby Ġlazy Ġ{ Ġenv OrThrow (" GCP _ PROJECT ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġservice ( request : ĠHttpRequest , Ġresponse : ĠHttpResponse ) Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (). httpRequest ( request ) ĊĊĠĠĠĠĠĠĠ Ġparse Parameters ( request , Ġde serializer ). flatMap Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (). info (" Parameters Ġparsed ", Ġv (" params ", Ġparams )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . catch And Flatten Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Left Ġ= Ġ{ Ġerr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstatusCode Ġ= Ġif Ġ( err Ġis ĠValidation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (). warn (" Failed Ġwith Ġinvalid Ġinput Ġduring Ġrun Ġof ĠHTTP Ġfunction Ġ$ function Name ", Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp URLConnection . HTTP _ BAD _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (). error (" Failed Ġwith Ġexception Ġduring Ġrun Ġof ĠHTTP Ġfunction Ġ$ function Name ", Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp URLConnection . HTTP _ INTERNAL _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . set StatusCode ( statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . writer . write ("$ function Name : ĠFailed Ġwith Ġ$ statusCode .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . writer . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Right Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . writer . write (" Ok .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . writer . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ