2026-06-11 01:02:16 +08:00

91 lines
3.1 KiB
Go

// Package activityclient adapts activity-service registration reward RPCs for user-service.
package activityclient
import (
"context"
"time"
"google.golang.org/grpc"
activityv1 "hyapp.local/api/proto/activity/v1"
userdomain "hyapp/services/user-service/internal/domain/user"
authservice "hyapp/services/user-service/internal/service/auth"
)
type Client struct {
registrationRewardClient activityv1.RegistrationRewardServiceClient
growthLevelClient activityv1.GrowthLevelServiceClient
}
func NewGRPC(conn grpc.ClientConnInterface) *Client {
return &Client{
registrationRewardClient: activityv1.NewRegistrationRewardServiceClient(conn),
growthLevelClient: activityv1.NewGrowthLevelServiceClient(conn),
}
}
// IssueRegistrationReward 只发起注册奖励幂等命令;可领取判断和实际发放都在 activity-service。
func (c *Client) IssueRegistrationReward(ctx context.Context, command authservice.RegistrationRewardCommand) error {
if c == nil || c.registrationRewardClient == nil {
return nil
}
_, err := c.registrationRewardClient.IssueRegistrationReward(ctx, &activityv1.IssueRegistrationRewardRequest{
Meta: &activityv1.RequestMeta{
RequestId: command.RequestID,
Caller: "user-service",
AppCode: command.AppCode,
SentAtMs: time.Now().UnixMilli(),
},
UserId: command.UserID,
CommandId: command.CommandID,
})
return err
}
// IssueRegistrationLevelBadges 发起注册等级徽章发放;资源选择和钱包发放都在 activity-service。
func (c *Client) IssueRegistrationLevelBadges(ctx context.Context, command authservice.RegistrationLevelBadgeCommand) error {
if c == nil || c.growthLevelClient == nil {
return nil
}
_, err := c.growthLevelClient.IssueRegistrationLevelBadges(ctx, &activityv1.IssueRegistrationLevelBadgesRequest{
Meta: &activityv1.RequestMeta{
RequestId: command.RequestID,
Caller: "user-service",
AppCode: command.AppCode,
SentAtMs: time.Now().UnixMilli(),
},
UserId: command.UserID,
CommandId: command.CommandID,
})
return err
}
// GetUserLevelProfile 读取用户当前三条等级轨道,供 user-service 靓号池申请做准入校验。
func (c *Client) GetUserLevelProfile(ctx context.Context, appCode string, userID int64, requestID string) (userdomain.UserLevelProfile, error) {
if c == nil || c.growthLevelClient == nil {
return userdomain.UserLevelProfile{}, nil
}
resp, err := c.growthLevelClient.BatchGetUserLevelDisplayProfiles(ctx, &activityv1.BatchGetUserLevelDisplayProfilesRequest{
Meta: &activityv1.RequestMeta{
RequestId: requestID,
Caller: "user-service",
AppCode: appCode,
SentAtMs: time.Now().UnixMilli(),
},
UserIds: []int64{userID},
})
if err != nil {
return userdomain.UserLevelProfile{}, err
}
profile := userdomain.UserLevelProfile{UserID: userID}
for _, item := range resp.GetProfiles() {
if item.GetUserId() != userID {
continue
}
profile.WealthLevel = item.GetWealth().GetLevel()
profile.GameLevel = item.GetGame().GetLevel()
profile.CharmLevel = item.GetCharm().GetLevel()
return profile, nil
}
return profile, nil
}