package Ġcom . d re we aster . ddd . k estrel . infrastructure . http . event source Ċ Ċ import Ġcom . d re we aster . ddd . k estrel . domain . Domain Event Tag Ċ import Ġcom . d re we aster . ddd . k estrel . infrastructure . http . util . Time Utils . instant From UTC String Ċ import Ġcom . d re we aster . ddd . k estrel . infrastructure . http . util . Time Utils . instant To UTC String Ċ import Ġjava . net . URL Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . time . Instant Ċ Ċ data Ġclass ĠHttp Json Event Query ( ĊĠĠĠĠĠĠĠ Ġval Ġtags : ĠSet < Domain Event Tag >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġafter Offset : ĠLong ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġafter Timestamp : ĠInstant ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġbatch Size : ĠInt ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( url Query Parameters : ĠMap < String , ĠList < String >> ): ĠHttp Json Event Query Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġurl Query Parameters [" tags "] ?. first ()?. split (",") ?. map Ġ{ ĠDomain Event Tag ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġafter Timestamp Ġ= Ġurl Query Parameters [" after _ timestamp "] ?. first OrNull ()?. let Ġ{ Ġinstant From UTC String ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġafter Offset Ġ= Ġurl Query Parameters [" after _ offset "] ?. first OrNull ()?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbatch Size Ġ= Ġurl Query Parameters [" batch _ size "] ?. first OrNull ()?. toInt () Ġ?: Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHttp Json Event Query ( tags ?. toSet (), Ġafter Offset , Ġafter Timestamp , Ġbatch Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġevents Url For ( protocol : ĠString , Ġhostname : ĠString , Ġport : ĠInt , Ġpath : ĠString ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġafter Timestamp Ġ!= Ġnull Ġ-> ĠURL ("$ protocol :// $ hostname :$ port $ path ? ${ tags QueryParam ( tags )} batch _ size =$ batch Size & after _ timestamp =${ URL Encoder . encode ( instant To UTC String ( after Timestamp ), Ġ" UTF - 8 ") }") ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠURL ("$ protocol :// $ hostname :$ port $ path ? ${ tags QueryParam ( tags )} batch _ size =$ batch Size & after _ offset =${ after Offset Ġ?: Ġ- 1 }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtags QueryParam ( tags : ĠSet < Domain Event Tag >? ): ĠString Ġ= Ġtags ?. let Ġ{" tags =${ it . join ToString (",") Ġ{ Ġtag Ġ-> Ġtag . value Ġ}} & "} Ġ?: Ġ"" Ċ }