From 9829c3c00d69a05a3d8ec4065d473e213688dc8d Mon Sep 17 00:00:00 2001 From: im-adithya Date: Wed, 25 Sep 2024 20:38:27 +0530 Subject: [PATCH 1/2] fix: use string or number type for boostagram field flexibility --- api/transactions.go | 8 ++--- transactions/transactions_service.go | 52 ++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/api/transactions.go b/api/transactions.go index d499fd98..6afacbcc 100644 --- a/api/transactions.go +++ b/api/transactions.go @@ -122,12 +122,12 @@ func toApiBoostagram(boostagram *transactions.Boostagram) *Boostagram { Name: boostagram.Name, Podcast: boostagram.Podcast, URL: boostagram.URL, - Episode: boostagram.Episode, - FeedId: boostagram.FeedId, - ItemId: boostagram.ItemId, + Episode: boostagram.Episode.String(), + FeedId: boostagram.FeedId.String(), + ItemId: boostagram.ItemId.String(), Timestamp: boostagram.Timestamp, Message: boostagram.Message, - SenderId: boostagram.SenderId, + SenderId: boostagram.SenderId.String(), SenderName: boostagram.SenderName, Time: boostagram.Time, Action: boostagram.Action, diff --git a/transactions/transactions_service.go b/transactions/transactions_service.go index d46d9828..e6c59ebe 100644 --- a/transactions/transactions_service.go +++ b/transactions/transactions_service.go @@ -49,20 +49,44 @@ const ( type Transaction = db.Transaction type Boostagram struct { - AppName string `json:"app_name"` - Name string `json:"name"` - Podcast string `json:"podcast"` - URL string `json:"url"` - Episode string `json:"episode,omitempty"` - FeedId string `json:"feedID,omitempty"` - ItemId string `json:"itemID,omitempty"` - Timestamp int64 `json:"ts,omitempty"` - Message string `json:"message,omitempty"` - SenderId string `json:"sender_id"` - SenderName string `json:"sender_name"` - Time string `json:"time"` - Action string `json:"action"` - ValueMsatTotal int64 `json:"value_msat_total"` + AppName string `json:"app_name"` + Name string `json:"name"` + Podcast string `json:"podcast"` + URL string `json:"url"` + Episode StringOrNumber `json:"episode,omitempty"` + FeedId StringOrNumber `json:"feedID,omitempty"` + ItemId StringOrNumber `json:"itemID,omitempty"` + Timestamp int64 `json:"ts,omitempty"` + Message string `json:"message,omitempty"` + SenderId StringOrNumber `json:"sender_id"` + SenderName string `json:"sender_name"` + Time string `json:"time"` + Action string `json:"action"` + ValueMsatTotal int64 `json:"value_msat_total"` +} + +type StringOrNumber struct { + StringData string + NumberData int64 +} + +func (sn *StringOrNumber) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &sn.StringData); err == nil { + return nil + } + + if err := json.Unmarshal(data, &sn.NumberData); err == nil { + return nil + } + + return fmt.Errorf("cannot unmarshal %s into StringOrNumber type", data) +} + +func (sn StringOrNumber) String() string { + if sn.StringData != "" { + return sn.StringData + } + return fmt.Sprintf("%d", sn.NumberData) } type notFoundError struct { From 0a72daa7118226e51958b7e531b3594ce60f5954 Mon Sep 17 00:00:00 2001 From: im-adithya Date: Wed, 25 Sep 2024 21:08:58 +0530 Subject: [PATCH 2/2] chore: fix tests --- transactions/keysend_test.go | 4 ++-- transactions/notifications_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/transactions/keysend_test.go b/transactions/keysend_test.go index 6aa0ee33..017cc60d 100644 --- a/transactions/keysend_test.go +++ b/transactions/keysend_test.go @@ -337,8 +337,8 @@ func TestSendKeysend_TLVs(t *testing.T) { assert.Equal(t, "⚡ WebLN Demo", boostagram.AppName) assert.Equal(t, "⚡ WebLN Demo", boostagram.Name) assert.Equal(t, "Podcasting 2.0", boostagram.Podcast) - assert.Equal(t, "Episode 104: A New Dump", boostagram.Episode) - assert.Equal(t, "https://feeds.podcastindex.org/pc20.xml", boostagram.FeedId) + assert.Equal(t, "Episode 104: A New Dump", boostagram.Episode.String()) + assert.Equal(t, "https://feeds.podcastindex.org/pc20.xml", boostagram.FeedId.String()) assert.Equal(t, int64(21), boostagram.Timestamp) assert.Equal(t, "Go podcasting!", boostagram.Message) assert.Equal(t, "Satoshi Nakamoto", boostagram.SenderName) diff --git a/transactions/notifications_test.go b/transactions/notifications_test.go index 5da740fe..4c97b434 100644 --- a/transactions/notifications_test.go +++ b/transactions/notifications_test.go @@ -127,8 +127,8 @@ func TestNotifications_ReceivedKeysend(t *testing.T) { assert.Equal(t, "⚡ WebLN Demo", boostagram.AppName) assert.Equal(t, "⚡ WebLN Demo", boostagram.Name) assert.Equal(t, "Podcasting 2.0", boostagram.Podcast) - assert.Equal(t, "Episode 104: A New Dump", boostagram.Episode) - assert.Equal(t, "https://feeds.podcastindex.org/pc20.xml", boostagram.FeedId) + assert.Equal(t, "Episode 104: A New Dump", boostagram.Episode.String()) + assert.Equal(t, "https://feeds.podcastindex.org/pc20.xml", boostagram.FeedId.String()) assert.Equal(t, int64(21), boostagram.Timestamp) assert.Equal(t, "Go podcasting!", boostagram.Message) assert.Equal(t, "Satoshi Nakamoto", boostagram.SenderName)