mirror of
https://github.com/foomo/sesamy-go.git
synced 2025-10-16 12:35:43 +00:00
feat: update client
This commit is contained in:
parent
d943476d76
commit
7100ab858b
@ -115,7 +115,7 @@ func (p *Publisher) Publish(topic string, messages ...*message.Message) error {
|
||||
|
||||
resp, err := p.client.Do(req)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "publishing message %s failed", msg.UUID)
|
||||
return errors.Wrapf(err, "failed to publish message: %s", msg.UUID)
|
||||
}
|
||||
|
||||
if err = p.handleResponseBody(resp); err != nil {
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
package v2
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"go.uber.org/zap"
|
||||
@ -11,11 +12,19 @@ import (
|
||||
|
||||
type (
|
||||
Client struct {
|
||||
l *zap.Logger
|
||||
url string
|
||||
httpClient *http.Client
|
||||
l *zap.Logger
|
||||
url string
|
||||
cookies []string
|
||||
richsstsse string
|
||||
trackingID string
|
||||
measurementID string
|
||||
protocolVersion string
|
||||
httpClient *http.Client
|
||||
middlewares []ClientMiddleware
|
||||
}
|
||||
ClientOption func(*Client)
|
||||
ClientOption func(*Client)
|
||||
ClientHandler func(r *http.Request, event *Event) error
|
||||
ClientMiddleware func(next ClientHandler) ClientHandler
|
||||
)
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
@ -28,15 +37,30 @@ func ClientWithHTTPClient(v *http.Client) ClientOption {
|
||||
}
|
||||
}
|
||||
|
||||
func ClientWithCookies(v ...string) ClientOption {
|
||||
return func(o *Client) {
|
||||
o.cookies = append(o.cookies, v...)
|
||||
}
|
||||
}
|
||||
|
||||
func ClientWithMiddlewares(v ...ClientMiddleware) ClientOption {
|
||||
return func(o *Client) {
|
||||
o.middlewares = append(o.middlewares, v...)
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ~ Constructor
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
|
||||
func NewClient(l *zap.Logger, url string, opts ...ClientOption) *Client {
|
||||
func NewClient(l *zap.Logger, url, trackingID string, opts ...ClientOption) *Client {
|
||||
inst := &Client{
|
||||
l: l,
|
||||
url: url,
|
||||
httpClient: http.DefaultClient,
|
||||
l: l,
|
||||
url: url,
|
||||
cookies: []string{"gtm_auth", "gtm_debug", "gtm_preview"},
|
||||
trackingID: trackingID,
|
||||
protocolVersion: "2",
|
||||
httpClient: http.DefaultClient,
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt(inst)
|
||||
@ -56,14 +80,62 @@ func (c *Client) HTTPClient() *http.Client {
|
||||
// ~ Public methods
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
|
||||
func (c *Client) Send(ctx context.Context, event *Event) error {
|
||||
func (c *Client) Send(r *http.Request, event *Event) error {
|
||||
yes := "1"
|
||||
|
||||
// set default values
|
||||
event.TrackingID = &c.trackingID
|
||||
event.Richsstsse = &c.richsstsse
|
||||
event.ProtocolVersion = &c.protocolVersion
|
||||
|
||||
event.IgnoreReferrer = &yes
|
||||
|
||||
{ // set referrer parameter
|
||||
if referrer, err := url.Parse(r.Referer()); err != nil {
|
||||
c.l.With(zap.Error(err)).Warn("failed to parse referrer")
|
||||
} else {
|
||||
event.DocumentLocation = &referrer.Path
|
||||
event.DocumentHostname = &referrer.Host
|
||||
}
|
||||
}
|
||||
|
||||
{ // TODO check
|
||||
if value, _ := r.Cookie("gtm_debug"); value != nil {
|
||||
event.IsDebug = &yes
|
||||
}
|
||||
}
|
||||
|
||||
{ // set client id
|
||||
if value, _ := r.Cookie("_ga"); value != nil {
|
||||
clientID := strings.TrimPrefix(value.Value, "GA1.1.")
|
||||
event.ClientID = &clientID
|
||||
}
|
||||
}
|
||||
|
||||
{ // pass through cookies
|
||||
for _, value := range c.cookies {
|
||||
if cookie, _ := r.Cookie(value); cookie != nil {
|
||||
r.Header.Add("Cookie", cookie.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
next := c.SendRaw
|
||||
for _, middleware := range c.middlewares {
|
||||
next = middleware(next)
|
||||
}
|
||||
|
||||
return next(r, event)
|
||||
}
|
||||
|
||||
func (c *Client) SendRaw(r *http.Request, event *Event) error {
|
||||
values, body, err := Marshal(event)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to marshall event")
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(
|
||||
ctx,
|
||||
r.Context(),
|
||||
http.MethodPost,
|
||||
c.url+"?"+values.Encode(),
|
||||
body,
|
||||
|
||||
@ -58,6 +58,7 @@ func (e *AddPaymentInfo) MPv2() *mpv2.Event {
|
||||
eventParameterNumber := map[string]string{}
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberValue.String(), mp.SetFloat64(e.Value))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameAddPaymentInfo),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
|
||||
@ -58,6 +58,7 @@ func (e *AddShippingInfo) MPv2() *mpv2.Event {
|
||||
eventParameterNumber := map[string]string{}
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberValue.String(), mp.SetFloat64(e.Value))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameAddShippingInfo),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
|
||||
@ -51,8 +51,10 @@ func (e *AddToCart) MPv2() *mpv2.Event {
|
||||
eventParameterNumber := map[string]string{}
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberValue.String(), mp.SetFloat64(e.Value))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameAddToCart),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
Items: items,
|
||||
Richsstsse: mp.Set(""),
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,6 +51,7 @@ func (e *AddToWishlist) MPv2() *mpv2.Event {
|
||||
eventParameterNumber := map[string]string{}
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberValue.String(), mp.SetFloat64(e.Value))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameAddToWishlist),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
Items: items,
|
||||
|
||||
@ -55,6 +55,7 @@ func (e *BeginCheckout) MPv2() *mpv2.Event {
|
||||
eventParameterNumber := map[string]string{}
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberValue.String(), mp.SetFloat64(e.Value))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameBeginCheckout),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
|
||||
@ -22,6 +22,7 @@ func (e *Login) MPv2() *mpv2.Event {
|
||||
eventParameter := map[string]string{}
|
||||
mp.AddStringMap(eventParameter, mpv2.EventParameterMethod.String(), mp.SetString(e.Method))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameLogin),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,6 +64,7 @@ func (e *Purchase) MPv2() *mpv2.Event {
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberShipping.String(), mp.SetFloat64(e.Shipping))
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberTax.String(), mp.SetFloat64(e.Tax))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNamePurchase),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
|
||||
@ -64,6 +64,7 @@ func (e *Refund) MPv2() *mpv2.Event {
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberShipping.String(), mp.SetFloat64(e.Shipping))
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberTax.String(), mp.SetFloat64(e.Tax))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameRefund),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
|
||||
@ -51,6 +51,7 @@ func (e *RemoveFromCart) MPv2() *mpv2.Event {
|
||||
eventParameterNumber := map[string]string{}
|
||||
mp.AddStringMap(eventParameterNumber, mpv2.EventParameterNumberValue.String(), mp.SetFloat64(e.Value))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameRemoveFromCart),
|
||||
Currency: mp.SetString(e.Currency),
|
||||
EventParameterNumber: mp.SetStringMap(eventParameterNumber),
|
||||
Items: items,
|
||||
|
||||
@ -22,6 +22,7 @@ func (e *Search) MPv2() *mpv2.Event {
|
||||
eventParameter := map[string]string{}
|
||||
mp.AddStringMap(eventParameter, mpv2.EventParameterSearchTerm.String(), mp.SetString(e.SearchTerm))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameSearch),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@ func (e *SignUp) MPv2() *mpv2.Event {
|
||||
eventParameter := map[string]string{}
|
||||
mp.AddStringMap(eventParameter, mpv2.EventParameterMethod.String(), mp.SetString(e.Method))
|
||||
return &mpv2.Event{
|
||||
EventName: mp.Set(mpv2.EventNameSignUp),
|
||||
EventParameter: mp.SetStringMap(eventParameter),
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user