feat_: Send payment request data (#6137)

This commit is contained in:
Cuteivist 2024-12-03 09:33:40 +01:00 committed by GitHub
parent 0f2ae8fbab
commit 4aa683f03d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 115 additions and 32 deletions

View File

@ -283,6 +283,7 @@ func (m *Message) MarshalJSON() ([]byte, error) {
ContactVerificationState ContactVerificationState `json:"contactVerificationState,omitempty"` ContactVerificationState ContactVerificationState `json:"contactVerificationState,omitempty"`
DiscordMessage *protobuf.DiscordMessage `json:"discordMessage,omitempty"` DiscordMessage *protobuf.DiscordMessage `json:"discordMessage,omitempty"`
BridgeMessage *protobuf.BridgeMessage `json:"bridgeMessage,omitempty"` BridgeMessage *protobuf.BridgeMessage `json:"bridgeMessage,omitempty"`
PaymentRequests []*protobuf.PaymentRequest `json:"paymentRequests,omitempty"`
} }
item := MessageStructType{ item := MessageStructType{
ID: m.ID, ID: m.ID,
@ -325,6 +326,7 @@ func (m *Message) MarshalJSON() ([]byte, error) {
DeletedForMe: m.DeletedForMe, DeletedForMe: m.DeletedForMe,
ContactRequestState: m.ContactRequestState, ContactRequestState: m.ContactRequestState,
ContactVerificationState: m.ContactVerificationState, ContactVerificationState: m.ContactVerificationState,
PaymentRequests: m.PaymentRequests,
} }
if sticker := m.GetSticker(); sticker != nil { if sticker := m.GetSticker(); sticker != nil {
@ -383,6 +385,7 @@ func (m *Message) UnmarshalJSON(data []byte) error {
ImageHeight uint32 `json:"imageHeight"` ImageHeight uint32 `json:"imageHeight"`
AlbumImagesCount uint32 `json:"albumImagesCount"` AlbumImagesCount uint32 `json:"albumImagesCount"`
From string `json:"from"` From string `json:"from"`
PaymentRequestList []*protobuf.PaymentRequest `json:"paymentRequests"`
Deleted bool `json:"deleted,omitempty"` Deleted bool `json:"deleted,omitempty"`
DeletedForMe bool `json:"deletedForMe,omitempty"` DeletedForMe bool `json:"deletedForMe,omitempty"`
}{ }{
@ -410,6 +413,7 @@ func (m *Message) UnmarshalJSON(data []byte) error {
} }
} }
m.PaymentRequests = aux.PaymentRequestList
m.ResponseTo = aux.ResponseTo m.ResponseTo = aux.ResponseTo
m.EnsName = aux.EnsName m.EnsName = aux.EnsName
m.DisplayName = aux.DisplayName m.DisplayName = aux.DisplayName

View File

@ -640,10 +640,10 @@ func assertMarshalAndUnmarshalJSON[T any](t *testing.T, obj *T, msgAndArgs ...an
} }
func TestMarshalMessageJSON(t *testing.T) { func TestMarshalMessageJSON(t *testing.T) {
msg := &Message{ msg := NewMessage()
ID: "1", msg.ID = "1"
From: "0x04c51631b3354242d5a56f044c3b7703bcc001e8c725c4706928b3fac3c2a12ec9019e1e224d487f5c893389405bcec998bc687307f290a569d6a97d24b711bca8", msg.From = "0x04c51631b3354242d5a56f044c3b7703bcc001e8c725c4706928b3fac3c2a12ec9019e1e224d487f5c893389405bcec998bc687307f290a569d6a97d24b711bca8"
LinkPreviews: []LinkPreview{ msg.LinkPreviews = []LinkPreview{
{ {
Type: protobuf.UnfurledLink_LINK, Type: protobuf.UnfurledLink_LINK,
Description: "GitHub is where people build software.", Description: "GitHub is where people build software.",
@ -657,6 +657,13 @@ func TestMarshalMessageJSON(t *testing.T) {
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=", DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
}, },
}, },
}
msg.PaymentRequests = []*protobuf.PaymentRequest{
{
Amount: "1000000000000000000",
Receiver: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8882",
Symbol: "ETH",
ChainId: 1,
}, },
} }

View File

@ -115,7 +115,8 @@ func (db sqlitePersistence) tableUserMessagesAllFields() string {
contact_verification_status, contact_verification_status,
mentioned, mentioned,
replied, replied,
discord_message_id` discord_message_id,
payment_requests`
} }
// keep the same order as in tableUserMessagesScanAllFields // keep the same order as in tableUserMessagesScanAllFields
@ -148,6 +149,7 @@ func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string {
m1.links, m1.links,
m1.unfurled_links, m1.unfurled_links,
m1.unfurled_status_links, m1.unfurled_status_links,
m1.payment_requests,
m1.command_id, m1.command_id,
m1.command_value, m1.command_value,
m1.command_from, m1.command_from,
@ -243,6 +245,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
var serializedLinks []byte var serializedLinks []byte
var serializedUnfurledLinks []byte var serializedUnfurledLinks []byte
var serializedUnfurledStatusLinks []byte var serializedUnfurledStatusLinks []byte
var serializedPaymentRequests []byte
var alias sql.NullString var alias sql.NullString
var identicon sql.NullString var identicon sql.NullString
var communityID sql.NullString var communityID sql.NullString
@ -303,6 +306,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
&serializedLinks, &serializedLinks,
&serializedUnfurledLinks, &serializedUnfurledLinks,
&serializedUnfurledStatusLinks, &serializedUnfurledStatusLinks,
&serializedPaymentRequests,
&command.ID, &command.ID,
&command.Value, &command.Value,
&command.From, &command.From,
@ -474,6 +478,13 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
message.UnfurledStatusLinks = &links message.UnfurledStatusLinks = &links
} }
if serializedPaymentRequests != nil {
err := json.Unmarshal(serializedPaymentRequests, &message.PaymentRequests)
if err != nil {
return err
}
}
if attachment.Id != "" { if attachment.Id != "" {
discordMessage.Attachments = append(discordMessage.Attachments, attachment) discordMessage.Attachments = append(discordMessage.Attachments, attachment)
} }
@ -581,6 +592,14 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message)
} }
} }
var serializedPaymentRequests []byte
if len(message.PaymentRequests) != 0 {
serializedPaymentRequests, err = json.Marshal(message.PaymentRequests)
if err != nil {
return nil, err
}
}
return []interface{}{ return []interface{}{
message.ID, message.ID,
message.WhisperTimestamp, message.WhisperTimestamp,
@ -638,6 +657,7 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message)
message.Mentioned, message.Mentioned,
message.Replied, message.Replied,
discordMessage.Id, discordMessage.Id,
serializedPaymentRequests,
}, nil }, nil
} }

View File

@ -0,0 +1 @@
ALTER TABLE user_messages ADD COLUMN payment_requests BLOB;

View File

@ -2128,3 +2128,45 @@ func TestGetCommunityMemberMessages(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.Len(t, messages, 2) require.Len(t, messages, 2)
} }
func TestPaymentRequestMessages(t *testing.T) {
db, err := openTestDB()
require.NoError(t, err)
p := newSQLitePersistence(db)
chatID := testPublicChatID
var messages []*common.Message
message := common.Message{
ID: strconv.Itoa(1),
LocalChatID: chatID,
ChatMessage: &protobuf.ChatMessage{
Clock: uint64(1),
},
From: testPK,
}
message.PaymentRequests = []*protobuf.PaymentRequest{
{
Amount: "1.123",
Symbol: "ETH",
Receiver: "0x123",
ChainId: 1,
},
{
Amount: "1.124",
Symbol: "DAI",
Receiver: "0x124",
ChainId: 11,
},
}
messages = append(messages, &message)
err = p.SaveMessages(messages)
require.NoError(t, err)
m, _, err := p.MessageByChatID(testPublicChatID, "", 10)
require.NoError(t, err)
require.Len(t, m, 1)
require.Equal(t, m[0].PaymentRequests, message.PaymentRequests)
}

View File

@ -119,6 +119,13 @@ message BridgeMessage {
string parentMessageID = 7; string parentMessageID = 7;
} }
message PaymentRequest {
string receiver = 1;
string symbol = 2;
string amount = 3;
uint32 chainId = 4;
}
message UnfurledLinkThumbnail { message UnfurledLinkThumbnail {
bytes payload = 1; bytes payload = 1;
uint32 width = 2; uint32 width = 2;
@ -234,6 +241,8 @@ message ChatMessage {
uint32 customization_color = 19; uint32 customization_color = 19;
repeated PaymentRequest payment_requests = 20;
enum ContentType { enum ContentType {
UNKNOWN_CONTENT_TYPE = 0; UNKNOWN_CONTENT_TYPE = 0;
TEXT_PLAIN = 1; TEXT_PLAIN = 1;