79 lines
3.2 KiB
Go
79 lines
3.2 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"
|
||
)
|
||
|
||
// GetActiveHostSalaryPolicy 读取当前生效的主播工资政策,供 gateway 按当前主播区域展示平台规则。
|
||
func (s *Server) GetActiveHostSalaryPolicy(ctx context.Context, req *walletv1.GetActiveHostSalaryPolicyRequest) (*walletv1.GetActiveHostSalaryPolicyResponse, error) {
|
||
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
||
policy, found, err := s.svc.GetActiveHostSalaryPolicy(ctx, req.GetAppCode(), req.GetRegionId(), req.GetSettlementMode(), req.GetSettlementTriggerMode(), req.GetNowMs())
|
||
if err != nil {
|
||
return nil, xerr.ToGRPCError(err)
|
||
}
|
||
response := &walletv1.GetActiveHostSalaryPolicyResponse{Found: found}
|
||
if found {
|
||
response.Policy = hostSalaryPolicyToProto(policy)
|
||
}
|
||
return response, nil
|
||
}
|
||
|
||
// GetHostSalaryProgress 读取主播当前工资周期钻石累计,gateway 用它计算工资政策等级进度。
|
||
func (s *Server) GetHostSalaryProgress(ctx context.Context, req *walletv1.GetHostSalaryProgressRequest) (*walletv1.GetHostSalaryProgressResponse, error) {
|
||
ctx = appcode.WithContext(ctx, req.GetAppCode())
|
||
progress, err := s.svc.GetHostSalaryProgress(ctx, req.GetAppCode(), req.GetHostUserId(), req.GetCycleKey(), req.GetNowMs())
|
||
if err != nil {
|
||
return nil, xerr.ToGRPCError(err)
|
||
}
|
||
return &walletv1.GetHostSalaryProgressResponse{Progress: hostSalaryProgressToProto(progress)}, nil
|
||
}
|
||
|
||
func hostSalaryProgressToProto(progress ledger.HostSalaryProgress) *walletv1.HostSalaryProgress {
|
||
return &walletv1.HostSalaryProgress{
|
||
HostUserId: progress.HostUserID,
|
||
CycleKey: progress.CycleKey,
|
||
RegionId: progress.RegionID,
|
||
AgencyOwnerUserId: progress.AgencyOwnerUserID,
|
||
TotalDiamonds: progress.TotalDiamonds,
|
||
GiftDiamondTotal: progress.GiftDiamondTotal,
|
||
UpdatedAtMs: progress.UpdatedAtMS,
|
||
}
|
||
}
|
||
|
||
func hostSalaryPolicyToProto(policy ledger.HostSalaryPolicy) *walletv1.HostSalaryPolicy {
|
||
levels := make([]*walletv1.HostSalaryPolicyLevel, 0, len(policy.Levels))
|
||
for _, level := range policy.Levels {
|
||
levels = append(levels, hostSalaryPolicyLevelToProto(level))
|
||
}
|
||
return &walletv1.HostSalaryPolicy{
|
||
PolicyId: policy.PolicyID,
|
||
Name: policy.Name,
|
||
RegionId: policy.RegionID,
|
||
Status: policy.Status,
|
||
SettlementMode: policy.SettlementMode,
|
||
SettlementTriggerMode: policy.SettlementTriggerMode,
|
||
GiftCoinToDiamondRatio: policy.GiftCoinToDiamondRatio,
|
||
ResidualDiamondToUsdRate: policy.ResidualDiamondToUSDRate,
|
||
EffectiveFromMs: policy.EffectiveFromMs,
|
||
EffectiveToMs: policy.EffectiveToMs,
|
||
Levels: levels,
|
||
}
|
||
}
|
||
|
||
func hostSalaryPolicyLevelToProto(level ledger.HostSalaryPolicyLevel) *walletv1.HostSalaryPolicyLevel {
|
||
return &walletv1.HostSalaryPolicyLevel{
|
||
LevelNo: int32(level.LevelNo),
|
||
RequiredDiamonds: level.RequiredDiamonds,
|
||
HostSalaryUsdMinor: level.HostSalaryUSDMinor,
|
||
HostCoinReward: level.HostCoinReward,
|
||
AgencySalaryUsdMinor: level.AgencySalaryUSDMinor,
|
||
Status: level.Status,
|
||
SortOrder: int32(level.SortOrder),
|
||
}
|
||
}
|