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"`
DiscordMessage *protobuf.DiscordMessage `json:"discordMessage,omitempty"`
BridgeMessage *protobuf.BridgeMessage `json:"bridgeMessage,omitempty"`
PaymentRequests []*protobuf.PaymentRequest `json:"paymentRequests,omitempty"`
}
item := MessageStructType{
ID: m.ID,
@ -325,6 +326,7 @@ func (m *Message) MarshalJSON() ([]byte, error) {
DeletedForMe: m.DeletedForMe,
ContactRequestState: m.ContactRequestState,
ContactVerificationState: m.ContactVerificationState,
PaymentRequests: m.PaymentRequests,
}
if sticker := m.GetSticker(); sticker != nil {
@ -383,6 +385,7 @@ func (m *Message) UnmarshalJSON(data []byte) error {
ImageHeight uint32 `json:"imageHeight"`
AlbumImagesCount uint32 `json:"albumImagesCount"`
From string `json:"from"`
PaymentRequestList []*protobuf.PaymentRequest `json:"paymentRequests"`
Deleted bool `json:"deleted,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.EnsName = aux.EnsName
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) {
msg := &Message{
ID: "1",
From: "0x04c51631b3354242d5a56f044c3b7703bcc001e8c725c4706928b3fac3c2a12ec9019e1e224d487f5c893389405bcec998bc687307f290a569d6a97d24b711bca8",
LinkPreviews: []LinkPreview{
msg := NewMessage()
msg.ID = "1"
msg.From = "0x04c51631b3354242d5a56f044c3b7703bcc001e8c725c4706928b3fac3c2a12ec9019e1e224d487f5c893389405bcec998bc687307f290a569d6a97d24b711bca8"
msg.LinkPreviews = []LinkPreview{
{
Type: protobuf.UnfurledLink_LINK,
Description: "GitHub is where people build software.",
@ -657,6 +657,13 @@ func TestMarshalMessageJSON(t *testing.T) {
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,
mentioned,
replied,
discord_message_id`
discord_message_id,
payment_requests`
}
// keep the same order as in tableUserMessagesScanAllFields
@ -148,6 +149,7 @@ func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string {
m1.links,
m1.unfurled_links,
m1.unfurled_status_links,
m1.payment_requests,
m1.command_id,
m1.command_value,
m1.command_from,
@ -243,6 +245,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
var serializedLinks []byte
var serializedUnfurledLinks []byte
var serializedUnfurledStatusLinks []byte
var serializedPaymentRequests []byte
var alias sql.NullString
var identicon sql.NullString
var communityID sql.NullString
@ -303,6 +306,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
&serializedLinks,
&serializedUnfurledLinks,
&serializedUnfurledStatusLinks,
&serializedPaymentRequests,
&command.ID,
&command.Value,
&command.From,
@ -474,6 +478,13 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
message.UnfurledStatusLinks = &links
}
if serializedPaymentRequests != nil {
err := json.Unmarshal(serializedPaymentRequests, &message.PaymentRequests)
if err != nil {
return err
}
}
if attachment.Id != "" {
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{}{
message.ID,
message.WhisperTimestamp,
@ -638,6 +657,7 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message)
message.Mentioned,
message.Replied,
discordMessage.Id,
serializedPaymentRequests,
}, 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.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;
}
message PaymentRequest {
string receiver = 1;
string symbol = 2;
string amount = 3;
uint32 chainId = 4;
}
message UnfurledLinkThumbnail {
bytes payload = 1;
uint32 width = 2;
@ -234,6 +241,8 @@ message ChatMessage {
uint32 customization_color = 19;
repeated PaymentRequest payment_requests = 20;
enum ContentType {
UNKNOWN_CONTENT_TYPE = 0;
TEXT_PLAIN = 1;