126 lines
4.7 KiB
Go
126 lines
4.7 KiB
Go
package payment
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
walletv1 "hyapp.local/api/proto/wallet/v1"
|
|
)
|
|
|
|
type rechargeBillDTO struct {
|
|
AppCode string `json:"appCode"`
|
|
TransactionID string `json:"transactionId"`
|
|
CommandID string `json:"commandId"`
|
|
RechargeType string `json:"rechargeType"`
|
|
Status string `json:"status"`
|
|
ExternalRef string `json:"externalRef"`
|
|
UserID int64 `json:"userId"`
|
|
SellerUserID int64 `json:"sellerUserId"`
|
|
SellerRegionID int64 `json:"sellerRegionId"`
|
|
TargetRegionID int64 `json:"targetRegionId"`
|
|
PolicyID int64 `json:"policyId"`
|
|
PolicyVersion string `json:"policyVersion"`
|
|
CurrencyCode string `json:"currencyCode"`
|
|
CoinAmount int64 `json:"coinAmount"`
|
|
USDMinorAmount int64 `json:"usdMinorAmount"`
|
|
ExchangeCoinAmount int64 `json:"exchangeCoinAmount"`
|
|
ExchangeUSDMinorAmount int64 `json:"exchangeUsdMinorAmount"`
|
|
CreatedAtMS int64 `json:"createdAtMs"`
|
|
}
|
|
|
|
type rechargeProductDTO struct {
|
|
AppCode string `json:"appCode"`
|
|
ProductID int64 `json:"productId"`
|
|
ProductCode string `json:"productCode"`
|
|
ProductName string `json:"productName"`
|
|
Description string `json:"description"`
|
|
Platform string `json:"platform"`
|
|
Channel string `json:"channel"`
|
|
CurrencyCode string `json:"currencyCode"`
|
|
AmountUSDT string `json:"amountUsdt"`
|
|
AmountUSDTMicro int64 `json:"amountUsdtMicro"`
|
|
AmountMicro int64 `json:"amountMicro"`
|
|
AmountMinor int64 `json:"amountMinor"`
|
|
CoinAmount int64 `json:"coinAmount"`
|
|
PolicyVersion string `json:"policyVersion"`
|
|
RegionIDs []int64 `json:"regionIds"`
|
|
ResourceAssetType string `json:"resourceAssetType"`
|
|
Status string `json:"status"`
|
|
Enabled bool `json:"enabled"`
|
|
SortOrder int32 `json:"sortOrder"`
|
|
CreatedByUserID int64 `json:"createdByUserId"`
|
|
UpdatedByUserID int64 `json:"updatedByUserId"`
|
|
CreatedAtMS int64 `json:"createdAtMs"`
|
|
UpdatedAtMS int64 `json:"updatedAtMs"`
|
|
}
|
|
|
|
func rechargeBillFromProto(item *walletv1.RechargeBill) rechargeBillDTO {
|
|
if item == nil {
|
|
return rechargeBillDTO{}
|
|
}
|
|
return rechargeBillDTO{
|
|
AppCode: item.GetAppCode(),
|
|
TransactionID: item.GetTransactionId(),
|
|
CommandID: item.GetCommandId(),
|
|
RechargeType: item.GetRechargeType(),
|
|
Status: item.GetStatus(),
|
|
ExternalRef: item.GetExternalRef(),
|
|
UserID: item.GetUserId(),
|
|
SellerUserID: item.GetSellerUserId(),
|
|
SellerRegionID: item.GetSellerRegionId(),
|
|
TargetRegionID: item.GetTargetRegionId(),
|
|
PolicyID: item.GetPolicyId(),
|
|
PolicyVersion: item.GetPolicyVersion(),
|
|
CurrencyCode: item.GetCurrencyCode(),
|
|
CoinAmount: item.GetCoinAmount(),
|
|
USDMinorAmount: item.GetUsdMinorAmount(),
|
|
ExchangeCoinAmount: item.GetExchangeCoinAmount(),
|
|
ExchangeUSDMinorAmount: item.GetExchangeUsdMinorAmount(),
|
|
CreatedAtMS: item.GetCreatedAtMs(),
|
|
}
|
|
}
|
|
|
|
func rechargeProductFromProto(item *walletv1.RechargeProduct) rechargeProductDTO {
|
|
if item == nil {
|
|
return rechargeProductDTO{}
|
|
}
|
|
return rechargeProductDTO{
|
|
AppCode: item.GetAppCode(),
|
|
ProductID: item.GetProductId(),
|
|
ProductCode: item.GetProductCode(),
|
|
ProductName: item.GetProductName(),
|
|
Description: item.GetDescription(),
|
|
Platform: item.GetPlatform(),
|
|
Channel: item.GetChannel(),
|
|
CurrencyCode: item.GetCurrencyCode(),
|
|
AmountUSDT: formatUSDTMicro(item.GetAmountMicro()),
|
|
AmountUSDTMicro: item.GetAmountMicro(),
|
|
AmountMicro: item.GetAmountMicro(),
|
|
AmountMinor: item.GetAmountMinor(),
|
|
CoinAmount: item.GetCoinAmount(),
|
|
PolicyVersion: item.GetPolicyVersion(),
|
|
RegionIDs: append([]int64(nil), item.GetRegionIds()...),
|
|
ResourceAssetType: item.GetResourceAssetType(),
|
|
Status: item.GetStatus(),
|
|
Enabled: item.GetEnabled(),
|
|
SortOrder: item.GetSortOrder(),
|
|
CreatedByUserID: item.GetCreatedByUserId(),
|
|
UpdatedByUserID: item.GetUpdatedByUserId(),
|
|
CreatedAtMS: item.GetCreatedAtMs(),
|
|
UpdatedAtMS: item.GetUpdatedAtMs(),
|
|
}
|
|
}
|
|
|
|
func formatUSDTMicro(amount int64) string {
|
|
if amount <= 0 {
|
|
return "0"
|
|
}
|
|
whole := amount / usdtMicroUnit
|
|
fraction := amount % usdtMicroUnit
|
|
if fraction == 0 {
|
|
return strconv.FormatInt(whole, 10)
|
|
}
|
|
return fmt.Sprintf("%d.%s", whole, strings.TrimRight(fmt.Sprintf("%06d", fraction), "0"))
|
|
}
|