Skip to content

Commit 21f1ccc

Browse files
committed
External deposit chat messages for relationship accounts are now diverted to the verified merchant chat
1 parent a193dc1 commit 21f1ccc

File tree

5 files changed

+68
-10
lines changed

5 files changed

+68
-10
lines changed

pkg/code/async/geyser/external_deposit.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,10 @@ func processPotentialExternalDeposit(ctx context.Context, data code_data.Provide
265265
if err != nil {
266266
return errors.Wrap(err, "error updating cash transactions chat")
267267
}
268+
err = chat_util.SendMerchantExchangeMessage(ctx, data, intentRecord)
269+
if err != nil {
270+
return errors.Wrap(err, "error updating merchant chat")
271+
}
268272

269273
// For tracking in balances
270274
externalDepositRecord := &deposit.Record{

pkg/code/chat/message_cash_transactions.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import (
1616
)
1717

1818
// SendCashTransactionsExchangeMessage sends a message to the Cash Transactions
19-
// chat with exchange data content related to the submitted intent.
19+
// chat with exchange data content related to the submitted intent. Intents that
20+
// don't belong in the Cash Transactions chat will be ignored.
2021
//
2122
// Note: Tests covered in SubmitIntent history tests
2223
//
@@ -105,7 +106,14 @@ func SendCashTransactionsExchangeMessage(ctx context.Context, data code_data.Pro
105106

106107
case intent.ExternalDeposit:
107108
messageId = strings.Split(messageId, "-")[0]
108-
verbByMessageReceiver[intentRecord.ExternalDepositMetadata.DestinationOwnerAccount] = chatpb.ExchangeDataContent_DEPOSITED
109+
destinationAccountInfoRecord, err := data.GetAccountInfoByTokenAddress(ctx, intentRecord.ExternalDepositMetadata.DestinationTokenAccount)
110+
if err != nil {
111+
return err
112+
} else if destinationAccountInfoRecord.AccountType != commonpb.AccountType_RELATIONSHIP {
113+
// Relationship accounts payments will show up in the verified
114+
// merchant chat
115+
verbByMessageReceiver[intentRecord.ExternalDepositMetadata.DestinationOwnerAccount] = chatpb.ExchangeDataContent_DEPOSITED
116+
}
109117

110118
default:
111119
return nil

pkg/code/chat/message_merchant.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package chat
22

33
import (
44
"context"
5+
"strings"
56

67
"github.com/pkg/errors"
78

@@ -15,7 +16,8 @@ import (
1516
)
1617

1718
// SendMerchantExchangeMessage sends a message to the merchant's chat with
18-
// exchange data content related to the submitted intent.
19+
// exchange data content related to the submitted intent. Intents that
20+
// don't belong in the merchant chat will be ignored.
1921
//
2022
// Note: Tests covered in SubmitIntent history tests
2123
func SendMerchantExchangeMessage(ctx context.Context, data code_data.Provider, intentRecord *intent.Record) error {
@@ -32,7 +34,7 @@ func SendMerchantExchangeMessage(ctx context.Context, data code_data.Provider, i
3234
// but this is the most flexible solution with the chat model.
3335
chatTitle := PaymentsName
3436
chatType := chat.ChatTypeInternal
35-
isVerified := false
37+
isVerifiedChat := false
3638

3739
exchangeData, ok := getExchangeDataFromIntent(intentRecord)
3840
if !ok {
@@ -51,7 +53,7 @@ func SendMerchantExchangeMessage(ctx context.Context, data code_data.Provider, i
5153
if paymentRequestRecord.Domain != nil {
5254
chatTitle = *paymentRequestRecord.Domain
5355
chatType = chat.ChatTypeExternalApp
54-
isVerified = paymentRequestRecord.IsVerified
56+
isVerifiedChat = paymentRequestRecord.IsVerified
5557
}
5658

5759
verbByMessageReceiver[intentRecord.InitiatorOwnerAccount] = chatpb.ExchangeDataContent_SPENT
@@ -68,7 +70,7 @@ func SendMerchantExchangeMessage(ctx context.Context, data code_data.Provider, i
6870
// and will have merchant payments appear in the verified merchant
6971
// chat.
7072
chatTitle = *destinationAccountInfoRecord.RelationshipTo
71-
isVerified = true
73+
isVerifiedChat = true
7274
verbByMessageReceiver[intentRecord.SendPrivatePaymentMetadata.DestinationOwnerAccount] = chatpb.ExchangeDataContent_DEPOSITED
7375
}
7476
}
@@ -84,11 +86,24 @@ func SendMerchantExchangeMessage(ctx context.Context, data code_data.Provider, i
8486
// and will have merchant payments appear in the verified merchant
8587
// chat.
8688
chatTitle = *destinationAccountInfoRecord.RelationshipTo
87-
isVerified = true
89+
isVerifiedChat = true
8890
verbByMessageReceiver[intentRecord.SendPublicPaymentMetadata.DestinationOwnerAccount] = chatpb.ExchangeDataContent_DEPOSITED
8991
}
9092
}
9193
}
94+
case intent.ExternalDeposit:
95+
messageId = strings.Split(messageId, "-")[0]
96+
destinationAccountInfoRecord, err := data.GetAccountInfoByTokenAddress(ctx, intentRecord.ExternalDepositMetadata.DestinationTokenAccount)
97+
if err != nil {
98+
return err
99+
} else if destinationAccountInfoRecord.AccountType == commonpb.AccountType_RELATIONSHIP {
100+
// Relationship accounts only exist against verified merchants,
101+
// and will have merchant payments appear in the verified merchant
102+
// chat.
103+
chatTitle = *destinationAccountInfoRecord.RelationshipTo
104+
isVerifiedChat = true
105+
verbByMessageReceiver[intentRecord.ExternalDepositMetadata.DestinationOwnerAccount] = chatpb.ExchangeDataContent_DEPOSITED
106+
}
92107
default:
93108
return nil
94109
}
@@ -121,7 +136,7 @@ func SendMerchantExchangeMessage(ctx context.Context, data code_data.Provider, i
121136
data,
122137
chatTitle,
123138
chatType,
124-
isVerified,
139+
isVerifiedChat,
125140
receiver,
126141
protoMessage,
127142
true,

pkg/code/server/grpc/transaction/v2/history_test.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,17 @@ func TestPaymentHistory_HappyPath(t *testing.T) {
125125
sendingPhone.resetConfig()
126126
receivingPhone.resetConfig()
127127

128+
// [Cash Transactions] sendingPhone WITHDREW $32.1 USD of Kin
129+
// [Verified Merchant] receivingPhone DEPOSITED $32.1 USD of Kin
128130
sendingPhone.publiclyWithdraw777KinToCodeUserBetweenRelationshipAccounts(t, merchantDomain, receivingPhone).requireSuccess(t)
131+
132+
// [Cash Transactions] sendingPhone WITHDREW $32.1 USD of Kin
133+
// [Verified Merchant] receivingPhone DEPOSITED $32.1 USD of Kin
129134
sendingPhone.privatelyWithdraw321KinToCodeUserRelationshipAccount(t, receivingPhone, merchantDomain).requireSuccess(t)
130135

136+
// [Verified Merchant] receivingPhone DEPOSITED 12,345 Kin
137+
server.simulateExternalDepositHistoryItem(t, receivingPhone.parentAccount, getTimelockVault(t, receivingPhone.getAuthorityForRelationshipAccount(t, merchantDomain)), kin.ToQuarks(12_345))
138+
131139
//
132140
// New chat assertions below
133141
//
@@ -326,7 +334,7 @@ func TestPaymentHistory_HappyPath(t *testing.T) {
326334

327335
chatMessageRecords, err = server.data.GetAllChatMessages(server.ctx, chat.GetChatId("example.com", receivingPhone.parentAccount.PublicKey().ToBase58(), true))
328336
require.NoError(t, err)
329-
require.Len(t, chatMessageRecords, 4)
337+
require.Len(t, chatMessageRecords, 5)
330338

331339
protoChatMessage = getProtoChatMessage(t, chatMessageRecords[0])
332340
require.Len(t, protoChatMessage.Content, 1)
@@ -364,6 +372,15 @@ func TestPaymentHistory_HappyPath(t *testing.T) {
364372
assert.Equal(t, 32.1, protoChatMessage.Content[0].GetExchangeData().GetExact().NativeAmount)
365373
assert.Equal(t, kin.ToQuarks(321), protoChatMessage.Content[0].GetExchangeData().GetExact().Quarks)
366374

375+
protoChatMessage = getProtoChatMessage(t, chatMessageRecords[4])
376+
require.Len(t, protoChatMessage.Content, 1)
377+
require.NotNil(t, protoChatMessage.Content[0].GetExchangeData())
378+
assert.Equal(t, chatpb.ExchangeDataContent_DEPOSITED, protoChatMessage.Content[0].GetExchangeData().Verb)
379+
assert.EqualValues(t, currency_lib.KIN, protoChatMessage.Content[0].GetExchangeData().GetExact().Currency)
380+
assert.Equal(t, 1.0, protoChatMessage.Content[0].GetExchangeData().GetExact().ExchangeRate)
381+
assert.Equal(t, 12_345.0, protoChatMessage.Content[0].GetExchangeData().GetExact().NativeAmount)
382+
assert.Equal(t, kin.ToQuarks(12_345), protoChatMessage.Content[0].GetExchangeData().GetExact().Quarks)
383+
367384
chatMessageRecords, err = server.data.GetAllChatMessages(server.ctx, chat.GetChatId("example.com", receivingPhone.parentAccount.PublicKey().ToBase58(), false))
368385
require.NoError(t, err)
369386
require.Len(t, chatMessageRecords, 1)
@@ -567,7 +584,7 @@ func TestPaymentHistory_HappyPath(t *testing.T) {
567584
assert.False(t, items[13].IsMicroPayment)
568585

569586
items = receivingPhone.getPaymentHistory(t)
570-
require.Len(t, items, 13)
587+
require.Len(t, items, 14)
571588

572589
assert.Equal(t, transactionpb.PaymentHistoryItem_RECEIVE, items[0].PaymentType)
573590
assert.Equal(t, kin.ToQuarks(42), items[0].ExchangeData.Quarks)
@@ -737,6 +754,19 @@ func TestPaymentHistory_HappyPath(t *testing.T) {
737754
assert.False(t, items[12].IsAirdrop)
738755
assert.Equal(t, transactionpb.AirdropType_UNKNOWN, items[12].AirdropType)
739756
assert.False(t, items[12].IsMicroPayment)
757+
758+
assert.Equal(t, transactionpb.PaymentHistoryItem_RECEIVE, items[13].PaymentType)
759+
assert.Equal(t, kin.ToQuarks(12_345), items[13].ExchangeData.Quarks)
760+
assert.EqualValues(t, currency_lib.KIN, items[13].ExchangeData.Currency)
761+
assert.EqualValues(t, 1.0, items[13].ExchangeData.ExchangeRate)
762+
assert.EqualValues(t, 12_345.0, items[13].ExchangeData.NativeAmount)
763+
assert.False(t, items[13].IsWithdraw)
764+
assert.True(t, items[13].IsDeposit)
765+
assert.False(t, items[13].IsRemoteSend)
766+
assert.False(t, items[13].IsReturned)
767+
assert.False(t, items[13].IsAirdrop)
768+
assert.Equal(t, transactionpb.AirdropType_UNKNOWN, items[13].AirdropType)
769+
assert.False(t, items[13].IsMicroPayment)
740770
}
741771

742772
func TestGetPaymentHistory_NoPayments(t *testing.T) {

pkg/code/server/grpc/transaction/v2/testutil.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ func (s *serverTestEnv) simulateExternalDepositHistoryItem(t *testing.T, owner,
374374
require.NoError(t, s.data.SaveIntent(s.ctx, intentRecord))
375375

376376
require.NoError(t, chat_util.SendCashTransactionsExchangeMessage(s.ctx, s.data, intentRecord))
377+
require.NoError(t, chat_util.SendMerchantExchangeMessage(s.ctx, s.data, intentRecord))
377378
}
378379

379380
func (s *serverTestEnv) simulateAllCommitmentsUpgraded(t *testing.T) {

0 commit comments

Comments
 (0)