diff --git a/adapter/model.go b/adapter/model.go index 8430f11..e321733 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -643,6 +643,11 @@ type RemittanceRequest struct { RemittanceReasonType string `json:"remittanceReasonType"` } +type CreateMemberWalletRequest struct { + NegativeAmountLimit float64 `json:"negativeAmountLimit"` + Currency Currency `json:"currency"` +} + type CreateWithdrawRequest struct { MemberId int64 `json:"memberId"` Price float64 `json:"price"` diff --git a/adapter/wallet.go b/adapter/wallet.go index 5e426e6..f73c07e 100644 --- a/adapter/wallet.go +++ b/adapter/wallet.go @@ -10,6 +10,21 @@ type Wallet struct { Client *Client } +func (api *Wallet) CreateMemberWallet(ctx context.Context, memberId int64, request CreateMemberWalletRequest) (*MemberWalletResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, fmt.Sprintf("/wallet/v1/members/%d/wallets", memberId), request) + if err != nil { + return nil, err + } + + response := &Response[MemberWalletResponse]{} + err = api.Client.Do(ctx, newRequest, response) + if err != nil { + return nil, err + } + + return response.Data, nil +} + func (api *Wallet) RetrieveMemberWallet(ctx context.Context, memberId int64) (*MemberWalletResponse, error) { newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/wallet/v1/members/%d/wallet", memberId), nil) if err != nil { diff --git a/tests/wallet_test.go b/tests/wallet_test.go index 10221ba..eaa1050 100644 --- a/tests/wallet_test.go +++ b/tests/wallet_test.go @@ -1,167 +1,180 @@ package tests import ( - "context" - "github.com/craftgate/craftgate-go-client/adapter" - craftgate "github.com/craftgate/craftgate-go-client/adapter" - "github.com/davecgh/go-spew/spew" - "testing" - "time" + "context" + "github.com/craftgate/craftgate-go-client/adapter" + craftgate "github.com/craftgate/craftgate-go-client/adapter" + "github.com/davecgh/go-spew/spew" + "testing" + "time" ) var walletClient, _ = craftgate.New("api-key", "secret-key", "https://sandbox-api.craftgate.io") func TestWallet_RetrieveMemberWallet(t *testing.T) { - res, err := walletClient.Wallet.RetrieveMemberWallet(context.Background(), 1) - _, _ = spew.Printf("%#v\n", res) + res, err := walletClient.Wallet.RetrieveMemberWallet(context.Background(), 1) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err) - } + if err != nil { + t.Errorf("Error %s", err) + } } func TestWallet_RetrieveMerchantMemberWallet(t *testing.T) { - res, err := walletClient.Wallet.RetrieveMerchantMemberWallet(context.Background()) - _, _ = spew.Printf("%#v\n", res) + res, err := walletClient.Wallet.RetrieveMerchantMemberWallet(context.Background()) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err) - } + if err != nil { + t.Errorf("Error %s", err) + } } func TestWallet_ResetMerchantMemberWalletBalance(t *testing.T) { - request := adapter.ResetMerchantMemberWalletBalanceRequest{WalletAmount: -10} - res, err := walletClient.Wallet.ResetMerchantMemberWalletBalance(context.Background(), request) - _, _ = spew.Printf("%#v\n", res) + request := adapter.ResetMerchantMemberWalletBalanceRequest{WalletAmount: -10} + res, err := walletClient.Wallet.ResetMerchantMemberWalletBalance(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_SearchWalletTransactions(t *testing.T) { - request := adapter.SearchWalletTransactionsRequest{} - res, err := walletClient.Wallet.SearchWalletTransactions(context.Background(), 1, request) - _, _ = spew.Printf("%#v\n", res) + request := adapter.SearchWalletTransactionsRequest{} + res, err := walletClient.Wallet.SearchWalletTransactions(context.Background(), 1, request) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_RetrieveRefundableAmountOfWalletTransaction(t *testing.T) { - res, err := walletClient.Wallet.RetrieveRefundableAmountOfWalletTransaction(context.Background(), 1) - _, _ = spew.Printf("%#v\n", res) + res, err := walletClient.Wallet.RetrieveRefundableAmountOfWalletTransaction(context.Background(), 1) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_RefundWalletTransactionToCard(t *testing.T) { - request := adapter.RefundWalletTransactionToCardRequest{RefundPrice: 10} - res, err := walletClient.Wallet.RefundWalletTransactionToCard(context.Background(), 1, request) - _, _ = spew.Printf("%#v\n", res) + request := adapter.RefundWalletTransactionToCardRequest{RefundPrice: 10} + res, err := walletClient.Wallet.RefundWalletTransactionToCard(context.Background(), 1, request) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_RetrieveRefundWalletTransactionsToCard(t *testing.T) { - res, err := walletClient.Wallet.RetrieveRefundWalletTransactionsToCard(context.Background(), 1) - _, _ = spew.Printf("%#v\n", res) + res, err := walletClient.Wallet.RetrieveRefundWalletTransactionsToCard(context.Background(), 1) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_SendRemittance(t *testing.T) { - request := adapter.RemittanceRequest{ - Price: 100, - MemberId: 1, - Description: "bonus", - RemittanceReasonType: "REDEEM_ONLY_LOYALTY", - } - res, err := walletClient.Wallet.SendRemittance(context.Background(), request) - _, _ = spew.Printf("%#v\n", res) - - if err != nil { - t.Errorf("Error %s", err.Error()) - } + request := adapter.RemittanceRequest{ + Price: 100, + MemberId: 1, + Description: "bonus", + RemittanceReasonType: "REDEEM_ONLY_LOYALTY", + } + res, err := walletClient.Wallet.SendRemittance(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_ReceiveRemittance(t *testing.T) { - request := adapter.RemittanceRequest{ - Price: 10, - MemberId: 1, - Description: "bonus", - RemittanceReasonType: "REDEEM_ONLY_LOYALTY", - } - res, err := walletClient.Wallet.ReceiveRemittance(context.Background(), request) - _, _ = spew.Printf("%#v\n", res) - - if err != nil { - t.Errorf("Error %s", err.Error()) - } + request := adapter.RemittanceRequest{ + Price: 10, + MemberId: 1, + Description: "bonus", + RemittanceReasonType: "REDEEM_ONLY_LOYALTY", + } + res, err := walletClient.Wallet.ReceiveRemittance(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_RetrieveRemittance(t *testing.T) { - res, err := walletClient.Wallet.RetrieveRemittance(context.Background(), 1) - _, _ = spew.Printf("%#v\n", res) + res, err := walletClient.Wallet.RetrieveRemittance(context.Background(), 1) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_CreateWithdraw(t *testing.T) { - request := adapter.CreateWithdrawRequest{ - Price: 5, - MemberId: 1, - Description: "Para çekme talebi", - Currency: "TRY", - } - res, err := walletClient.Wallet.CreateWithdraw(context.Background(), request) - _, _ = spew.Printf("%#v\n", res) - - if err != nil { - t.Errorf("Error %s", err.Error()) - } + request := adapter.CreateWithdrawRequest{ + Price: 5, + MemberId: 1, + Description: "Para çekme talebi", + Currency: "TRY", + } + res, err := walletClient.Wallet.CreateWithdraw(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_CancelWithdraw(t *testing.T) { - res, err := walletClient.Wallet.CancelWithdraw(context.Background(), 1) - _, _ = spew.Printf("%#v\n", res) + res, err := walletClient.Wallet.CancelWithdraw(context.Background(), 1) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_RetrieveWithdraw(t *testing.T) { - res, err := walletClient.Wallet.RetrieveWithdraw(context.Background(), 1) - _, _ = spew.Printf("%#v\n", res) + res, err := walletClient.Wallet.RetrieveWithdraw(context.Background(), 1) + _, _ = spew.Printf("%#v\n", res) - if err != nil { - t.Errorf("Error %s", err.Error()) - } + if err != nil { + t.Errorf("Error %s", err.Error()) + } } func TestWallet_SearchWithdraws(t *testing.T) { - request := adapter.SearchWithdrawsRequest{ - Currency: "TRY", - MinWithdrawPrice: 0, - MaxWithdrawPrice: 10000, - MinCreatedDate: time.Now().AddDate(0, 0, -180), - MaxCreatedDate: time.Now(), - } - res, err := walletClient.Wallet.SearchWithdraws(context.Background(), request) - - _, _ = spew.Printf("%#v\n", res) - - if err != nil { - t.Errorf("Error %s", err.Error()) - } + request := adapter.SearchWithdrawsRequest{ + Currency: "TRY", + MinWithdrawPrice: 0, + MaxWithdrawPrice: 10000, + MinCreatedDate: time.Now().AddDate(0, 0, -180), + MaxCreatedDate: time.Now(), + } + res, err := walletClient.Wallet.SearchWithdraws(context.Background(), request) + + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err.Error()) + } +} + +func TestWallet_CreateMemberWallet(t *testing.T) { + request := adapter.CreateMemberWalletRequest{ + NegativeAmountLimit: 0, + Currency: "TRY", + } + res, err := walletClient.Wallet.CreateMemberWallet(context.Background(), 1, request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err.Error()) + } }