From c9b7387a9e083e8e748dab8258666bcc0ebd65f5 Mon Sep 17 00:00:00 2001 From: nfel Date: Sun, 10 Aug 2025 13:19:18 +0330 Subject: [PATCH] IPG messages added --- errors/v1/msg.proto | 1 + wallet/v1/internal_srv.proto | 4 ++ wallet/v1/msg.proto | 124 ++++++++++++++++++++++++++++++----- wallet/v1/srv.proto | 14 ++-- 4 files changed, 117 insertions(+), 26 deletions(-) diff --git a/errors/v1/msg.proto b/errors/v1/msg.proto index d8727b6..16cd37d 100644 --- a/errors/v1/msg.proto +++ b/errors/v1/msg.proto @@ -115,6 +115,7 @@ enum ErrCode { MOBILE_NATIONAL_ID_MISS_MATCH = 7033; NOT_ENOUGH_LOCKED_BALANCE = 7034; NOT_ENOUGH_BALANCE_TO_LOCK = 7035; + IPG_GEN_TOKEN_FAILED = 7036; // Server errors SERVER_ERROR_FREEZED_BALANCE_NEGATIVE = 8000; diff --git a/wallet/v1/internal_srv.proto b/wallet/v1/internal_srv.proto index 402ba89..7869097 100644 --- a/wallet/v1/internal_srv.proto +++ b/wallet/v1/internal_srv.proto @@ -7,10 +7,14 @@ import "wallet/v1/msg.proto"; service InternalWalletSrv { rpc InternalWalletSrvHealth(base.v1.Empty) returns (base.v1.StatusRes); + // Lock And Release Assets rpc LockAsset(LockAssetReq) returns (base.v1.StatusRes); rpc ReleaseAsset(LockAssetReq) returns (base.v1.StatusRes); rpc CollectCommission(CommissionReq) returns (CommissionRes); rpc RefundCommission(CommissionReq) returns (CommissionRes); + + // Calculate stellar pub-priv key based on national id + rpc GetPublicKeyByNationalID(NationalIDReq) returns (PubKeyRes); } diff --git a/wallet/v1/msg.proto b/wallet/v1/msg.proto index d667b1e..68ad1f9 100644 --- a/wallet/v1/msg.proto +++ b/wallet/v1/msg.proto @@ -579,6 +579,33 @@ message CommissionRes {} // auth.v1.BankInfo bank_info = 2; // BankInfo // } +enum AccountingType { + ACCOUNTING_TYPE_WITHDRAW = 0; + + // Deposits + ACCOUNTING_TYPE_DEPOSIT_IPG = 10; + ACCOUNTING_TYPE_DEPOSIT_BANK_ACCOUNT = 11; + ACCOUNTING_TYPE_DEPOSIT_IBAN = 12; + ACCOUNTING_TYPE_DEPOSIT_CARD = 13; + ACCOUNTING_TYPE_DEPOSIT_DIRECT_DEBIT = 14; + + // Withdraw + ACCOUNTING_TYPE_WITHDRAW_IBAN = 20; // User request to receive irt via iban + ACCOUNTING_TYPE_WITHDRAW_CARD = 21; // User request to receive irt via card no + ACCOUNTING_TYPE_WITHDRAW_BANK_ACCOUNT = 22; // User request to receive irt via bank + ACCOUNTING_TYPE_WITHDRAW_IPG_REFUND = 23; + + // ??? +} +enum AccountingStatus { + ACCOUNTING_STATUS_UNKNOWN = 0; + ACCOUNTING_STATUS_PENDING = 1; + ACCOUNTING_STATUS_SUCCESS = 2; + ACCOUNTING_STATUS_FAILED = 3; + ACCOUNTING_STATUS_CANCELLED = 4; + ACCOUNTING_STATUS_REJECTED = 5; +} + enum IPGStatus { IPG_SUCCESS = 0; IPG_FAILED = -1; @@ -588,33 +615,98 @@ enum IPGStatus { // represent the information regarding the sale of the token message IPGGetTokenReq { auth.v1.InternalIAM iam = 1; - int64 asset_id = 2; - double amount = 3; - optional uint64 discount_code = 4; + double amount = 2; + repeated string allowed_card_numbers = 3; } // represent the information regarding the ipg gateway message IPGGetTokenRes { string url = 1; - int64 unit_price = 2; - int64 total_price = 3; - double amount = 4; - string asset = 5; - optional uint64 discount_code = 6; + int64 amount = 2; } message IPGConfirmReq { + string redirected_url = 1; // This field includes all of ipg's query params + // string ref_id = 1; + // string res_code = 2; + // string sale_order_id = 3; + // string sale_reference_id = 4; + // string card_holder_info = 5; + // string card_holder_pan = 6; + // string amount = 7; +} + +// type IPGLog struct { +// AccountingID uint +// Accounting Accounting +// RefID string `gorm:"primaryKey"` +// Amount int64 +// Status walletv1.AccountingStatus +// CreatedAt time.Time +// UpdatedAt time.Time +// Token string +// PSP PSP +// TransactionID *int64 +// Transaction *Transaction +// } +// + +// type PSP string +// +// const ( +// UNKNOWN_PSP = PSP("unknown") +// PSP_VANDAR_BP_MELLAT = PSP("vandar_bp_mellat") +// PSP_VANDAR_SEP = PSP("vandar_sep") +// PSP_VANDAR = PSP("vandar") +// PSP_BP_MELLAT = PSP("bp_mellat") +// ) + +enum PSP { + PSP_UNKNOWN = 0; + + PSP_VANDAR_BP_MELLAT = 10; + PSP_VANDAR_SEP = 11; + PSP_VANDAR = 12; + + PSP_BP_MELLAT = 20; +} + +message Accounting { + uint64 id = 1; + int64 user_id = 2; + int64 balance = 3; +} + +message IPGGenTokenPayload { + string ref_id = 1; + int64 amount = 2; + string payer_id = 3; + string mobile = 4; + string national_id = 5; + int64 order_id = 6; + string callback_url = 7; + repeated string bank_cards = 8; +} + +message IPGLog { + string ref_id = 1; + Accounting accounting = 2; + int64 amount = 4; + AccountingStatus status = 5; + string created_at = 6; + string updated_at = 7; + string token = 8; + PSP psp = 9; + optional int64 transaction_id = 10; + optional Transaction transaction = 11; +} + +message IPGLogReq { string ref_id = 1; - string res_code = 2; - string sale_order_id = 3; - string sale_reference_id = 4; - string card_holder_info = 5; - string card_holder_pan = 6; - string final_amount = 7; } message IPGConfirmRes { - string receipt_link = 1; + string ref_id = 1; } message SaleManualReq { @@ -690,7 +782,7 @@ message BuyAssetRes { /* Contract */ enum ContractType { CONTRACT_TYPE_ICO = 0; - CONTRACT_TYPE_MARKET = 1; //FIXME: Please remove this :) + CONTRACT_TYPE_MARKET = 1; // FIXME: Please remove this :) CONTRACT_TYPE_BNPL = 2; CONTRACT_TYPE_REDEEM = 3; CONTRACT_TYPE_MARKET_MAKER = 4; diff --git a/wallet/v1/srv.proto b/wallet/v1/srv.proto index 937158c..81325a9 100644 --- a/wallet/v1/srv.proto +++ b/wallet/v1/srv.proto @@ -9,19 +9,13 @@ import "wallet/v1/msg.proto"; service WalletService { rpc WalletSrvHealth(base.v1.Empty) returns (base.v1.StatusRes); - // Internal rpc - rpc InternalWalletDeleteCache(base.v1.Empty) returns (base.v1.StatusRes); - rpc InternalCreateFederation(auth.v1.InternalIAM) returns (base.v1.StatusRes); - rpc GetPublicKeyByNationalID(NationalIDReq) returns (PubKeyRes); - - rpc UserGetFederation(auth.v1.InternalIAM) returns (Federation); - rpc GetNetworkList(base.v1.Empty) returns (NetworkList); rpc GetAssetList(AssetFilter) returns (AssetList); rpc GetAsset(GetAssetReq) returns (Asset); rpc GetAssetCommissions(base.v1.IdReq) returns (CommissionList); rpc GetAssetPrice(base.v1.IdReq) returns (AssetPrice); + rpc AssetDiscount(AssetDiscountReq) returns (AssetDiscountRes); rpc UserInitWallet(UserInitWalletReq) returns (base.v1.StatusRes); rpc UserGetWalletList(auth.v1.InternalIAM) returns (WalletList); @@ -34,8 +28,10 @@ service WalletService { rpc IPGGetToken(IPGGetTokenReq) returns (IPGGetTokenRes); // IPG Confirm is a public api rpc IPGConfirm(IPGConfirmReq) returns (IPGConfirmRes); + rpc GetIPGLog(IPGLogReq) returns (IPGLog); + // Admin can increase user's balance as wish - rpc AdminManualSaleDeposit(SaleManualReq) returns (base.v1.StatusRes); + // rpc AdminManualSaleDeposit(SaleManualReq) returns (base.v1.StatusRes); // BNPL rpc GetBNPLList(base.v1.Empty) returns (BNPLList); @@ -54,8 +50,6 @@ service WalletService { rpc InternalTransferAsset(TransferAssetReq) returns (TransferAssetRes); rpc ExternalTransferAsset(TransferAssetReq) returns (TransferAssetRes); - rpc AssetDiscount(AssetDiscountReq) returns (AssetDiscountRes); - // --- IRT --- rpc WithdrawIRT(WithdrawIRTReq) returns (WithdrawIRTRes); rpc DepositIRT(DepositIRTReq) returns (IPGGetTokenRes);