2026-07-07 18:05:02 +08:00

75 lines
2.5 KiB
Go

package wallet
import (
"time"
"hyapp/services/wallet-service/internal/service/wallet/ports"
giftusecase "hyapp/services/wallet-service/internal/service/wallet/usecase/gift"
)
const walletBadgeGrantMetric = "wallet_badge_grant"
// Service 承载钱包账务用例。
type Service struct {
repository ports.Repository
giftLedger *giftusecase.Service
activity ports.ActivityBadgeClient
googlePlay ports.GooglePlayClient
mifaPay ports.MifaPayClient
v5Pay ports.V5PayClient
tronUSDT ports.TronUSDTClient
bscUSDT ports.BSCUSDTClient
binance ports.BinanceClient
externalRecharge ExternalRechargeConfig
now func() time.Time
}
// New 创建钱包服务。
func New(repository ports.Repository, activity ...ports.ActivityBadgeClient) *Service {
var activityClient ports.ActivityBadgeClient
if len(activity) > 0 {
activityClient = activity[0]
}
return &Service{
repository: repository,
giftLedger: giftusecase.New(repository),
activity: activityClient,
now: time.Now,
}
}
// SetGooglePlayClient 注入 Google Play Developer API 客户端;未配置时 confirm 返回依赖不可用。
func (s *Service) SetGooglePlayClient(client ports.GooglePlayClient) {
s.googlePlay = client
}
// SetMifaPayClient 注入 MiFaPay 下单和验签客户端;未配置时 H5 MiFaPay 下单返回依赖不可用。
func (s *Service) SetMifaPayClient(client ports.MifaPayClient) {
s.mifaPay = client
}
// SetV5PayClient 注入 V5Pay 下单、查询和验签客户端;未配置时 H5 V5Pay 下单返回依赖不可用。
func (s *Service) SetV5PayClient(client ports.V5PayClient) {
s.v5Pay = client
}
// SetTronUSDTClient 注入 TRON TRC20 交易校验客户端;未配置时 USDT tx 提交只会保留待确认订单。
func (s *Service) SetTronUSDTClient(client ports.TronUSDTClient) {
s.tronUSDT = client
}
// SetBSCUSDTClient 注入 BSC BEP20 交易校验客户端;默认不配置,避免误把公共 RPC 当成生产依赖。
func (s *Service) SetBSCUSDTClient(client ports.BSCUSDTClient) {
s.bscUSDT = client
}
// SetBinanceClient 注入 Binance 入金只读查询客户端;后台币商充值可用 off-chain 单号自动查账。
func (s *Service) SetBinanceClient(client ports.BinanceClient) {
s.binance = client
}
// SetExternalRechargeConfig 保存 H5 外部充值的站内公共配置,不把密钥或地址散落到 handler。
func (s *Service) SetExternalRechargeConfig(config ExternalRechargeConfig) {
s.externalRecharge = normalizeExternalRechargeConfig(config)
}