mirror of
https://github.com/foomo/sesamy-go.git
synced 2025-10-16 12:35:43 +00:00
feat: fix ecommerce encoding
This commit is contained in:
parent
3bd292ec56
commit
f021853848
@ -4,12 +4,11 @@ import (
|
||||
"maps"
|
||||
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/mpv2"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func MPv2[P any](source gtag.Payload, target *mpv2.Payload[P]) error {
|
||||
func MPv2(source gtag.Payload, target any) error {
|
||||
var sourceData map[string]any
|
||||
// encode gtag event to map
|
||||
dec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
|
||||
|
||||
@ -5,13 +5,12 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/mpv2"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func GTag[P any](source mpv2.Payload[P], target *gtag.Payload) error {
|
||||
func GTag[P any](source mpv2.Payload[P], target any) error {
|
||||
targetData := map[string]any{
|
||||
"client_id": source.ClientID,
|
||||
"user_id": source.UserID,
|
||||
@ -50,23 +49,18 @@ func GTag[P any](source mpv2.Payload[P], target *gtag.Payload) error {
|
||||
targetData["event_name"] = sourceData["name"]
|
||||
|
||||
if params, ok := sourceData["params"].(map[string]any); ok {
|
||||
targetEcommerceData := map[string]any{
|
||||
"currency": params["currency"],
|
||||
"promotion_id": params["promotion_id"],
|
||||
"promotion_name": params["promotion_name"],
|
||||
"location_id": params["location_id"],
|
||||
"is_conversion": params["is_conversion"],
|
||||
}
|
||||
targetData["currency"] = params["currency"]
|
||||
targetData["promotion_id"] = params["promotion_id"]
|
||||
targetData["promotion_name"] = params["promotion_name"]
|
||||
targetData["location_id"] = params["location_id"]
|
||||
targetData["is_conversion"] = params["is_conversion"]
|
||||
targetData["items"] = params["items"]
|
||||
delete(params, "currency")
|
||||
delete(params, "promotion_id")
|
||||
delete(params, "promotion_name")
|
||||
delete(params, "location_id")
|
||||
delete(params, "is_conversion")
|
||||
|
||||
targetData["ecommerce"] = targetEcommerceData
|
||||
targetData["items"] = params["items"]
|
||||
delete(params, "items")
|
||||
|
||||
{ // user_property
|
||||
targetEventProperty := map[string]any{}
|
||||
targetEventPropertyNumber := map[string]any{}
|
||||
@ -91,7 +85,7 @@ func GTag[P any](source mpv2.Payload[P], target *gtag.Payload) error {
|
||||
dec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
|
||||
WeaklyTypedInput: true,
|
||||
Squash: true,
|
||||
Result: &target,
|
||||
Result: target,
|
||||
TagName: "json",
|
||||
IgnoreUntaggedFields: true,
|
||||
})
|
||||
|
||||
@ -6,16 +6,18 @@ import (
|
||||
"net/url"
|
||||
"testing"
|
||||
|
||||
"github.com/foomo/gostandards/iso4217"
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/gtagencode"
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/mpv2"
|
||||
"github.com/foomo/sesamy-go/pkg/encoding/mpv2encode"
|
||||
"github.com/foomo/sesamy-go/pkg/event/params"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestSelectItem(t *testing.T) {
|
||||
query := "v=2&tid=G-F9XM71K45T>m=45he4580v9184715813z89184708445za200&_p=1715430403224&_dbg=1&gcd=13l3l3l2l1&npa=1&dma_cps=sypham&dma=1&cid=179294588.1715353601&ecid=251283723&ul=en-us&sr=3840x1600&_fplc=0&ur=&uaa=arm&uab=64&uafvl=Chromium%3B124.0.6367.119%7CGoogle%2520Chrome%3B124.0.6367.119%7CNot-A.Brand%3B99.0.0.0&uamb=0&uam=&uap=macOS&uapv=14.4.1&uaw=0&are=1&frm=0&pscdl=noapi&sst.gcd=13l3l3l2l1&sst.tft=1715430403224&sst.ude=0&_s=3&sid=1715428762&sct=2&seg=1&dl=https%3A%2F%2Fsesamy.local.bestbytes.net%2F%3Fgtm_debug%3D1715430402906&dr=https%3A%2F%2Ftagassistant.google.com%2F&dt=Home&en=select_item&pr1=idSKU_12345~nmStan%20and%20Friends%20Tee~afGoogle%20Merchandise%20Store~cpSUMMER_FUN~ds2.22~lp0~brGoogle~caApparel~c2Adult~c3Shirts~c4Crew~c5Short%20sleeve~lirelated_products~lnRelated%20Products~vagreen~loChIJIQBpAG2ahYAR_6128GcTUEo~pr10.01~qt3&ep.item_list_id=related_products&ep.item_list_name=Related%20products&_et=89&tfd=8618&richsstsse"
|
||||
query := "v=2&tid=G-F9XM71K45T>m=45he45m0v9184715813z89184708445za200zb9184708445&_p=1716795486104&_dbg=1&gcd=13l3l3l2l1&npa=1&dma_cps=sypham&dma=1&cid=179294588.1715353601&ecid=2065234266&ul=en-us&sr=2056x1329&_fplc=0&ur=&uaa=arm&uab=64&uafvl=Chromium%3B124.0.6367.201%7CGoogle%2520Chrome%3B124.0.6367.201%7CNot-A.Brand%3B99.0.0.0&uamb=0&uam=&uap=macOS&uapv=14.4.1&uaw=0&are=1&frm=0&pscdl=noapi&sst.gcd=13l3l3l2l1&sst.tft=1716795486104&sst.ude=0&_s=18&cu=USD&sid=1716807360&sct=16&seg=1&dl=https%3A%2F%2Fsesamy.local.bestbytes.net%2F%3Fgtm_debug%3D1716795486020&dr=https%3A%2F%2Ftagassistant.google.com%2F&dt=Home&en=remove_from_cart&pr1=idSKU_12345~nmStan%20and%20Friends%20Tee~afGoogle%20Merchandise%20Store~cpSUMMER_FUN~ds2.22~lp0~brGoogle~caApparel~c2Adult~c3Shirts~c4Crew~c5Short%20sleeve~lirelated_products~lnRelated%20Products~vagreen~loChIJIQBpAG2ahYAR_6128GcTUEo~pr10.01~qt3&ep.enable_page_views=false&epn.value=30.03&_et=10086&tfd=9253808&richsstsse"
|
||||
values, err := url.ParseQuery(query)
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -23,9 +25,12 @@ func TestSelectItem(t *testing.T) {
|
||||
err = gtag.Decode(values, &incoming)
|
||||
require.NoError(t, err)
|
||||
|
||||
var intermediate mpv2.Payload[params.SelectItem[params.Item]]
|
||||
var intermediate *mpv2.Payload[params.RemoveFromCart[params.Item]]
|
||||
err = gtagencode.MPv2(incoming, &intermediate)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, iso4217.USD, intermediate.Events[0].Params.Currency)
|
||||
|
||||
intermediate.Events[0].Params.Currency = iso4217.EUR
|
||||
|
||||
{
|
||||
out, err := json.MarshalIndent(intermediate, "", " ")
|
||||
@ -33,12 +38,36 @@ func TestSelectItem(t *testing.T) {
|
||||
fmt.Println(string(out))
|
||||
}
|
||||
|
||||
// var outgoing gtag.Event
|
||||
// err = event.Encode(intermediate, &outgoing)
|
||||
// require.NoError(t, err)
|
||||
// assert.Equal(t, incoming, outgoing)
|
||||
|
||||
err = mpv2encode.GTag(intermediate, &incoming)
|
||||
var outgoing gtag.Payload
|
||||
err = mpv2encode.GTag(*intermediate, &outgoing)
|
||||
require.NoError(t, err)
|
||||
// assert.Equal(t, incoming, outgoing)
|
||||
assert.Equal(t, iso4217.EUR, gtag.Get(outgoing.ECommerce.Currency))
|
||||
}
|
||||
|
||||
func TestSelectItem_Pointer(t *testing.T) {
|
||||
query := "v=2&tid=G-F9XM71K45T>m=45he45m0v9184715813z89184708445za200zb9184708445&_p=1716795486104&_dbg=1&gcd=13l3l3l2l1&npa=1&dma_cps=sypham&dma=1&cid=179294588.1715353601&ecid=2065234266&ul=en-us&sr=2056x1329&_fplc=0&ur=&uaa=arm&uab=64&uafvl=Chromium%3B124.0.6367.201%7CGoogle%2520Chrome%3B124.0.6367.201%7CNot-A.Brand%3B99.0.0.0&uamb=0&uam=&uap=macOS&uapv=14.4.1&uaw=0&are=1&frm=0&pscdl=noapi&sst.gcd=13l3l3l2l1&sst.tft=1716795486104&sst.ude=0&_s=18&cu=USD&sid=1716807360&sct=16&seg=1&dl=https%3A%2F%2Fsesamy.local.bestbytes.net%2F%3Fgtm_debug%3D1716795486020&dr=https%3A%2F%2Ftagassistant.google.com%2F&dt=Home&en=remove_from_cart&pr1=idSKU_12345~nmStan%20and%20Friends%20Tee~afGoogle%20Merchandise%20Store~cpSUMMER_FUN~ds2.22~lp0~brGoogle~caApparel~c2Adult~c3Shirts~c4Crew~c5Short%20sleeve~lirelated_products~lnRelated%20Products~vagreen~loChIJIQBpAG2ahYAR_6128GcTUEo~pr10.01~qt3&ep.enable_page_views=false&epn.value=30.03&_et=10086&tfd=9253808&richsstsse"
|
||||
values, err := url.ParseQuery(query)
|
||||
require.NoError(t, err)
|
||||
|
||||
var incoming *gtag.Payload
|
||||
err = gtag.Decode(values, &incoming)
|
||||
require.NoError(t, err)
|
||||
|
||||
var intermediate *mpv2.Payload[params.RemoveFromCart[params.Item]]
|
||||
err = gtagencode.MPv2(*incoming, &intermediate)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, iso4217.USD, intermediate.Events[0].Params.Currency)
|
||||
|
||||
// override value
|
||||
intermediate.Events[0].Params.Currency = iso4217.EUR
|
||||
|
||||
// {
|
||||
// out, err := json.MarshalIndent(intermediate, "", " ")
|
||||
// require.NoError(t, err)
|
||||
// fmt.Println(string(out))
|
||||
// }
|
||||
|
||||
err = mpv2encode.GTag(*intermediate, incoming)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, iso4217.EUR, gtag.Get(incoming.ECommerce.Currency))
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user