161 lines
6.1 KiB
Go
161 lines
6.1 KiB
Go
package grpc
|
|
|
|
import (
|
|
"context"
|
|
|
|
activityv1 "hyapp.local/api/proto/activity/v1"
|
|
"hyapp/pkg/appcode"
|
|
"hyapp/pkg/xerr"
|
|
domain "hyapp/services/activity-service/internal/domain/registrationreward"
|
|
service "hyapp/services/activity-service/internal/service/registrationreward"
|
|
)
|
|
|
|
// RegistrationRewardServer 暴露 App 查询和 user-service 注册后发放接口。
|
|
type RegistrationRewardServer struct {
|
|
activityv1.UnimplementedRegistrationRewardServiceServer
|
|
|
|
svc *service.Service
|
|
}
|
|
|
|
func NewRegistrationRewardServer(svc *service.Service) *RegistrationRewardServer {
|
|
return &RegistrationRewardServer{svc: svc}
|
|
}
|
|
|
|
func (s *RegistrationRewardServer) GetRegistrationRewardEligibility(ctx context.Context, req *activityv1.GetRegistrationRewardEligibilityRequest) (*activityv1.GetRegistrationRewardEligibilityResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
|
|
eligibility, err := s.svc.GetEligibility(ctx, req.GetUserId())
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
return &activityv1.GetRegistrationRewardEligibilityResponse{Eligibility: eligibilityToProto(eligibility)}, nil
|
|
}
|
|
|
|
func (s *RegistrationRewardServer) IssueRegistrationReward(ctx context.Context, req *activityv1.IssueRegistrationRewardRequest) (*activityv1.IssueRegistrationRewardResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
|
|
claim, eligibility, issued, err := s.svc.IssueRegistrationReward(ctx, domain.IssueCommand{
|
|
UserID: req.GetUserId(),
|
|
CommandID: req.GetCommandId(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
return &activityv1.IssueRegistrationRewardResponse{
|
|
Claim: registrationRewardClaimToProto(claim),
|
|
Eligibility: eligibilityToProto(eligibility),
|
|
Issued: issued,
|
|
}, nil
|
|
}
|
|
|
|
// AdminRegistrationRewardServer 暴露后台配置和领取记录查询入口。
|
|
type AdminRegistrationRewardServer struct {
|
|
activityv1.UnimplementedAdminRegistrationRewardServiceServer
|
|
|
|
svc *service.Service
|
|
}
|
|
|
|
func NewAdminRegistrationRewardServer(svc *service.Service) *AdminRegistrationRewardServer {
|
|
return &AdminRegistrationRewardServer{svc: svc}
|
|
}
|
|
|
|
func (s *AdminRegistrationRewardServer) GetRegistrationRewardConfig(ctx context.Context, req *activityv1.GetRegistrationRewardConfigRequest) (*activityv1.GetRegistrationRewardConfigResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
|
|
config, err := s.svc.GetConfig(ctx)
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
return &activityv1.GetRegistrationRewardConfigResponse{Config: registrationRewardConfigToProto(config)}, nil
|
|
}
|
|
|
|
func (s *AdminRegistrationRewardServer) UpdateRegistrationRewardConfig(ctx context.Context, req *activityv1.UpdateRegistrationRewardConfigRequest) (*activityv1.UpdateRegistrationRewardConfigResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
|
|
config, err := s.svc.UpdateConfig(ctx, domain.Config{
|
|
Enabled: req.GetEnabled(),
|
|
RewardType: req.GetRewardType(),
|
|
CoinAmount: req.GetCoinAmount(),
|
|
ResourceGroupID: req.GetResourceGroupId(),
|
|
DailyLimit: req.GetDailyLimit(),
|
|
UpdatedByAdminID: req.GetOperatorAdminId(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
return &activityv1.UpdateRegistrationRewardConfigResponse{Config: registrationRewardConfigToProto(config)}, nil
|
|
}
|
|
|
|
func (s *AdminRegistrationRewardServer) ListRegistrationRewardClaims(ctx context.Context, req *activityv1.ListRegistrationRewardClaimsRequest) (*activityv1.ListRegistrationRewardClaimsResponse, error) {
|
|
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
|
|
claims, total, todayClaimedCount, err := s.svc.ListClaims(ctx, domain.ClaimQuery{
|
|
Status: req.GetStatus(),
|
|
UserID: req.GetUserId(),
|
|
ClaimedStartMS: req.GetClaimedStartMs(),
|
|
ClaimedEndMS: req.GetClaimedEndMs(),
|
|
Page: req.GetPage(),
|
|
PageSize: req.GetPageSize(),
|
|
})
|
|
if err != nil {
|
|
return nil, xerr.ToGRPCError(err)
|
|
}
|
|
resp := &activityv1.ListRegistrationRewardClaimsResponse{
|
|
Claims: make([]*activityv1.RegistrationRewardClaim, 0, len(claims)),
|
|
Total: total,
|
|
TodayClaimedCount: todayClaimedCount,
|
|
}
|
|
for _, claim := range claims {
|
|
resp.Claims = append(resp.Claims, registrationRewardClaimToProto(claim))
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func registrationRewardConfigToProto(config domain.Config) *activityv1.RegistrationRewardConfig {
|
|
return &activityv1.RegistrationRewardConfig{
|
|
AppCode: config.AppCode,
|
|
Enabled: config.Enabled,
|
|
RewardType: config.RewardType,
|
|
CoinAmount: config.CoinAmount,
|
|
ResourceGroupId: config.ResourceGroupID,
|
|
DailyLimit: config.DailyLimit,
|
|
UpdatedByAdminId: config.UpdatedByAdminID,
|
|
CreatedAtMs: config.CreatedAtMS,
|
|
UpdatedAtMs: config.UpdatedAtMS,
|
|
}
|
|
}
|
|
|
|
func registrationRewardClaimToProto(claim domain.Claim) *activityv1.RegistrationRewardClaim {
|
|
if claim.ClaimID == "" {
|
|
return nil
|
|
}
|
|
return &activityv1.RegistrationRewardClaim{
|
|
ClaimId: claim.ClaimID,
|
|
CommandId: claim.CommandID,
|
|
UserId: claim.UserID,
|
|
RewardDay: claim.RewardDay,
|
|
RewardType: claim.RewardType,
|
|
CoinAmount: claim.CoinAmount,
|
|
ResourceGroupId: claim.ResourceGroupID,
|
|
Status: claim.Status,
|
|
WalletCommandId: claim.WalletCommandID,
|
|
WalletTransactionId: claim.WalletTransactionID,
|
|
ResourceGrantId: claim.ResourceGrantID,
|
|
FailureReason: claim.FailureReason,
|
|
ClaimedAtMs: claim.ClaimedAtMS,
|
|
CreatedAtMs: claim.CreatedAtMS,
|
|
UpdatedAtMs: claim.UpdatedAtMS,
|
|
}
|
|
}
|
|
|
|
func eligibilityToProto(item domain.Eligibility) *activityv1.RegistrationRewardEligibility {
|
|
return &activityv1.RegistrationRewardEligibility{
|
|
CanReceive: item.CanReceive,
|
|
Reason: item.Reason,
|
|
Enabled: item.Enabled,
|
|
RewardType: item.RewardType,
|
|
CoinAmount: item.CoinAmount,
|
|
ResourceGroupId: item.ResourceGroupID,
|
|
DailyLimit: item.DailyLimit,
|
|
DailyUsed: item.DailyUsed,
|
|
DailyRemaining: item.DailyRemaining,
|
|
RewardDay: item.RewardDay,
|
|
ServerTimeMs: item.ServerTimeMS,
|
|
}
|
|
}
|