From 2c68979504c5cbdb53d0b0d17a736d4ecc3ebb6d Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Tue, 12 Mar 2024 08:43:09 +0100 Subject: [PATCH] refactor: update client api --- measurementprotocol/v2/client.go | 40 +++++++++++++++++----------- measurementprotocol/v2/middleware.go | 12 ++++----- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/measurementprotocol/v2/client.go b/measurementprotocol/v2/client.go index de10ee3..dc85781 100644 --- a/measurementprotocol/v2/client.go +++ b/measurementprotocol/v2/client.go @@ -12,7 +12,8 @@ import ( type ( Client struct { l *zap.Logger - url string + path string + host string cookies []string trackingID string measurementID string @@ -35,6 +36,12 @@ func ClientWithHTTPClient(v *http.Client) ClientOption { } } +func ClientWithPath(v string) ClientOption { + return func(o *Client) { + o.path = v + } +} + func ClientWithCookies(v ...string) ClientOption { return func(o *Client) { o.cookies = append(o.cookies, v...) @@ -51,10 +58,11 @@ func ClientWithMiddlewares(v ...ClientMiddleware) ClientOption { // ~ Constructor // ------------------------------------------------------------------------------------------------ -func NewClient(l *zap.Logger, url, trackingID string, opts ...ClientOption) *Client { +func NewClient(l *zap.Logger, host, trackingID string, opts ...ClientOption) *Client { inst := &Client{ l: l, - url: url, + host: host, + path: "/g/collect", cookies: []string{"gtm_auth", "gtm_debug", "gtm_preview"}, trackingID: trackingID, protocolVersion: "2", @@ -87,32 +95,32 @@ func (c *Client) HTTPClient() *http.Client { // ~ Public methods // ------------------------------------------------------------------------------------------------ -func (c *Client) Send(r *http.Request, event *Event) error { - next := c.SendRaw - for _, middleware := range c.middlewares { - next = middleware(next) - } - return next(r, event) -} - -func (c *Client) SendType(r *http.Request, event Marshler) error { +func (c *Client) Send(r *http.Request, event Marshler) error { e, err := event.MarshalMPv2() if err != nil { return err } - return c.Send(r, e) + return c.SendEvent(r, e) +} + +func (c *Client) SendEvent(r *http.Request, event *Event) error { + next := c.SendRawEvent + for _, middleware := range c.middlewares { + next = middleware(next) + } + return next(r, event) } -func (c *Client) SendRaw(r *http.Request, event *Event) error { +func (c *Client) SendRawEvent(r *http.Request, event *Event) error { values, body, err := Encode(event) if err != nil { - return errors.Wrap(err, "failed to marshall event") + return errors.Wrap(err, "failed to encode event") } req, err := http.NewRequestWithContext( r.Context(), http.MethodPost, - fmt.Sprintf("%s?%s", c.url, EncodeValues(values)), + fmt.Sprintf("%s%s?%s", c.host, c.path, EncodeValues(values)), body, ) if err != nil { diff --git a/measurementprotocol/v2/middleware.go b/measurementprotocol/v2/middleware.go index 43db322..ae8562f 100644 --- a/measurementprotocol/v2/middleware.go +++ b/measurementprotocol/v2/middleware.go @@ -18,7 +18,7 @@ func MiddlewareTrackingID(v string) ClientMiddleware { return func(next ClientHandler) ClientHandler { return func(r *http.Request, event *Event) error { event.TrackingID = &v - return nil + return next(r, event) } } } @@ -27,7 +27,7 @@ func MiddlewarProtocolVersion(v string) ClientMiddleware { return func(next ClientHandler) ClientHandler { return func(r *http.Request, event *Event) error { event.ProtocolVersion = &v - return nil + return next(r, event) } } } @@ -36,7 +36,7 @@ func MiddlewarIgnoreReferrer(v string) ClientMiddleware { return func(next ClientHandler) ClientHandler { return func(r *http.Request, event *Event) error { event.IgnoreReferrer = &v - return nil + return next(r, event) } } } @@ -47,7 +47,7 @@ func MiddlewarDebug(next ClientHandler) ClientHandler { if value, _ := r.Cookie("gtm_debug"); value != nil { event.IsDebug = &v } - return nil + return next(r, event) } } @@ -57,7 +57,7 @@ func MiddlewarClientID(next ClientHandler) ClientHandler { clientID := strings.TrimPrefix(value.Value, "GA1.1.") event.ClientID = &clientID } - return nil + return next(r, event) } } @@ -69,6 +69,6 @@ func MiddlewarDocument(next ClientHandler) ClientHandler { event.DocumentLocation = &referrer.Path event.DocumentHostname = &referrer.Host } - return nil + return next(r, event) } }