256 lines
9.3 KiB
Go
256 lines
9.3 KiB
Go
package grpc
|
|
|
|
import (
|
|
"context"
|
|
|
|
walletv1 "hyapp.local/api/proto/wallet/v1"
|
|
"hyapp/pkg/appcode"
|
|
"hyapp/pkg/xerr"
|
|
"hyapp/services/wallet-service/internal/domain/ledger"
|
|
)
|
|
|
|
// DebitCPBreakupFee 扣除解除 CP/兄弟/姐妹关系费用;关系状态确认由 user-service 负责。
|
|
func (s *Server) DebitCPBreakupFee(ctx context.Context, req *walletv1.DebitCPBreakupFeeRequest) (*walletv1.DebitCPBreakupFeeResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.DebitCPBreakupFee(ctx, ledger.CPBreakupFeeCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
UserID: req.GetUserId(),
|
|
RelationshipID: req.GetRelationshipId(),
|
|
RelationType: req.GetRelationType(),
|
|
Amount: req.GetAmount(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
return &walletv1.DebitCPBreakupFeeResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
CoinSpent: receipt.CoinSpent,
|
|
CoinBalanceAfter: receipt.CoinBalanceAfter,
|
|
Balance: balanceToProto(receipt.Balance),
|
|
}, nil
|
|
}
|
|
|
|
// DebitWheelDraw 扣除转盘抽奖金币;中奖结果不在 wallet 内生成,避免钱包反向拥有活动规则。
|
|
func (s *Server) DebitWheelDraw(ctx context.Context, req *walletv1.DebitWheelDrawRequest) (*walletv1.DebitWheelDrawResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.DebitWheelDraw(ctx, ledger.WheelDrawDebitCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
UserID: req.GetUserId(),
|
|
WheelID: req.GetWheelId(),
|
|
DrawCount: req.GetDrawCount(),
|
|
Amount: req.GetAmount(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
return &walletv1.DebitWheelDrawResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
CoinSpent: receipt.CoinSpent,
|
|
CoinBalanceAfter: receipt.CoinBalanceAfter,
|
|
Balance: balanceToProto(receipt.Balance),
|
|
}, nil
|
|
}
|
|
|
|
// CreditTaskReward 处理 activity-service 任务奖励金币入账。
|
|
func (s *Server) CreditTaskReward(ctx context.Context, req *walletv1.CreditTaskRewardRequest) (*walletv1.CreditTaskRewardResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.CreditTaskReward(ctx, ledger.TaskRewardCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
TargetUserID: req.GetTargetUserId(),
|
|
AssetType: req.GetRewardAssetType(),
|
|
Amount: req.GetAmount(),
|
|
TaskType: req.GetTaskType(),
|
|
TaskID: req.GetTaskId(),
|
|
CycleKey: req.GetCycleKey(),
|
|
Reason: req.GetReason(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
|
|
return &walletv1.CreditTaskRewardResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
Amount: receipt.Amount,
|
|
GrantedAtMs: receipt.GrantedAtMS,
|
|
Balance: &walletv1.AssetBalance{
|
|
AppCode: receipt.Balance.AppCode,
|
|
AssetType: receipt.Balance.AssetType,
|
|
AvailableAmount: receipt.Balance.AvailableAmount,
|
|
FrozenAmount: receipt.Balance.FrozenAmount,
|
|
Version: receipt.Balance.Version,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// CreditLuckyGiftReward 处理 activity-service 幸运礼物抽奖 outbox 的中奖金币入账。
|
|
func (s *Server) CreditLuckyGiftReward(ctx context.Context, req *walletv1.CreditLuckyGiftRewardRequest) (*walletv1.CreditLuckyGiftRewardResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.CreditLuckyGiftReward(ctx, ledger.LuckyGiftRewardCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
TargetUserID: req.GetTargetUserId(),
|
|
Amount: req.GetAmount(),
|
|
DrawID: req.GetDrawId(),
|
|
RoomID: req.GetRoomId(),
|
|
VisibleRegionID: req.GetVisibleRegionId(),
|
|
CountryID: req.GetCountryId(),
|
|
GiftID: req.GetGiftId(),
|
|
PoolID: req.GetPoolId(),
|
|
Reason: req.GetReason(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
|
|
return &walletv1.CreditLuckyGiftRewardResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
Amount: receipt.Amount,
|
|
GrantedAtMs: receipt.GrantedAtMS,
|
|
Balance: &walletv1.AssetBalance{
|
|
AppCode: receipt.Balance.AppCode,
|
|
AssetType: receipt.Balance.AssetType,
|
|
AvailableAmount: receipt.Balance.AvailableAmount,
|
|
FrozenAmount: receipt.Balance.FrozenAmount,
|
|
Version: receipt.Balance.Version,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// CreditWheelReward 处理 activity-service 转盘金币奖品 outbox 的入账。
|
|
func (s *Server) CreditWheelReward(ctx context.Context, req *walletv1.CreditWheelRewardRequest) (*walletv1.CreditWheelRewardResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.CreditWheelReward(ctx, ledger.WheelRewardCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
TargetUserID: req.GetTargetUserId(),
|
|
Amount: req.GetAmount(),
|
|
DrawID: req.GetDrawId(),
|
|
WheelID: req.GetWheelId(),
|
|
SelectedTierID: req.GetSelectedTierId(),
|
|
VisibleRegionID: req.GetVisibleRegionId(),
|
|
Reason: req.GetReason(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
|
|
return &walletv1.CreditWheelRewardResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
Amount: receipt.Amount,
|
|
GrantedAtMs: receipt.GrantedAtMS,
|
|
Balance: &walletv1.AssetBalance{
|
|
AppCode: receipt.Balance.AppCode,
|
|
AssetType: receipt.Balance.AssetType,
|
|
AvailableAmount: receipt.Balance.AvailableAmount,
|
|
FrozenAmount: receipt.Balance.FrozenAmount,
|
|
Version: receipt.Balance.Version,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// CreditRoomTurnoverReward 处理 activity-service 每周房间流水奖励金币入账。
|
|
func (s *Server) CreditRoomTurnoverReward(ctx context.Context, req *walletv1.CreditRoomTurnoverRewardRequest) (*walletv1.CreditRoomTurnoverRewardResponse, error) {
|
|
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.CreditRoomTurnoverReward(ctx, ledger.RoomTurnoverRewardCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
TargetUserID: req.GetTargetUserId(),
|
|
Amount: req.GetAmount(),
|
|
SettlementID: req.GetSettlementId(),
|
|
RoomID: req.GetRoomId(),
|
|
PeriodStartMS: req.GetPeriodStartMs(),
|
|
PeriodEndMS: req.GetPeriodEndMs(),
|
|
CoinSpent: req.GetCoinSpent(),
|
|
TierID: req.GetTierId(),
|
|
TierCode: req.GetTierCode(),
|
|
Reason: req.GetReason(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
|
|
return &walletv1.CreditRoomTurnoverRewardResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
Amount: receipt.Amount,
|
|
GrantedAtMs: receipt.GrantedAtMS,
|
|
Balance: &walletv1.AssetBalance{
|
|
AppCode: receipt.Balance.AppCode,
|
|
AssetType: receipt.Balance.AssetType,
|
|
AvailableAmount: receipt.Balance.AvailableAmount,
|
|
FrozenAmount: receipt.Balance.FrozenAmount,
|
|
Version: receipt.Balance.Version,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// CreditInviteActivityReward 处理 activity-service 邀请活动奖励金币入账。
|
|
func (s *Server) CreditInviteActivityReward(ctx context.Context, req *walletv1.CreditInviteActivityRewardRequest) (*walletv1.CreditInviteActivityRewardResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.CreditInviteActivityReward(ctx, ledger.InviteActivityRewardCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
TargetUserID: req.GetTargetUserId(),
|
|
Amount: req.GetAmount(),
|
|
ClaimID: req.GetClaimId(),
|
|
RewardType: req.GetRewardType(),
|
|
TierID: req.GetTierId(),
|
|
TierCode: req.GetTierCode(),
|
|
CycleKey: req.GetCycleKey(),
|
|
ReachedValue: req.GetReachedValue(),
|
|
Reason: req.GetReason(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
|
|
return &walletv1.CreditInviteActivityRewardResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
Amount: receipt.Amount,
|
|
GrantedAtMs: receipt.GrantedAtMS,
|
|
Balance: &walletv1.AssetBalance{
|
|
AppCode: receipt.Balance.AppCode,
|
|
AssetType: receipt.Balance.AssetType,
|
|
AvailableAmount: receipt.Balance.AvailableAmount,
|
|
FrozenAmount: receipt.Balance.FrozenAmount,
|
|
Version: receipt.Balance.Version,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// CreditAgencyOpeningReward 处理 activity-service 代理开业流水档位奖励金币入账。
|
|
func (s *Server) CreditAgencyOpeningReward(ctx context.Context, req *walletv1.CreditAgencyOpeningRewardRequest) (*walletv1.CreditAgencyOpeningRewardResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
|
receipt, err := s.svc.CreditAgencyOpeningReward(ctx, ledger.AgencyOpeningRewardCommand{
|
|
AppCode: req.GetAppCode(),
|
|
CommandID: req.GetCommandId(),
|
|
TargetUserID: req.GetTargetUserId(),
|
|
Amount: req.GetAmount(),
|
|
ApplicationID: req.GetApplicationId(),
|
|
CycleID: req.GetCycleId(),
|
|
AgencyID: req.GetAgencyId(),
|
|
RankNo: req.GetRankNo(),
|
|
ScoreCoins: req.GetScoreCoins(),
|
|
Reason: req.GetReason(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
|
|
return &walletv1.CreditAgencyOpeningRewardResponse{
|
|
TransactionId: receipt.TransactionID,
|
|
Amount: receipt.Amount,
|
|
GrantedAtMs: receipt.GrantedAtMS,
|
|
Balance: &walletv1.AssetBalance{
|
|
AppCode: receipt.Balance.AppCode,
|
|
AssetType: receipt.Balance.AssetType,
|
|
AvailableAmount: receipt.Balance.AvailableAmount,
|
|
FrozenAmount: receipt.Balance.FrozenAmount,
|
|
Version: receipt.Balance.Version,
|
|
},
|
|
}, nil
|
|
}
|