2026-07-06 12:43:40 +08:00

41 lines
1.4 KiB
Go

package client
import (
"context"
"google.golang.org/grpc"
userv1 "hyapp.local/api/proto/user/v1"
"hyapp/pkg/appcode"
messageservice "hyapp/services/activity-service/internal/service/message"
)
// GRPCUserTargetSource reads fanout target user IDs from user-service instead of activity owning user data.
type GRPCUserTargetSource struct {
client userv1.UserServiceClient
}
// NewGRPCUserTargetSource creates a user-service backed target source for message fanout workers.
func NewGRPCUserTargetSource(conn *grpc.ClientConn) *GRPCUserTargetSource {
return &GRPCUserTargetSource{client: userv1.NewUserServiceClient(conn)}
}
// ListFanoutUserIDs returns a stable user_id cursor page for user-service backed fanout scopes.
func (s *GRPCUserTargetSource) ListFanoutUserIDs(ctx context.Context, query messageservice.TargetQuery) ([]int64, int64, bool, error) {
resp, err := s.client.ListUserIDs(ctx, &userv1.ListUserIDsRequest{
Meta: &userv1.RequestMeta{
RequestId: "message-fanout-worker",
Caller: "activity-service",
AppCode: appcode.FromContext(ctx),
},
TargetScope: query.TargetScope,
CursorUserId: query.CursorUserID,
PageSize: int32(query.PageSize),
RegionId: query.RegionID,
Country: query.Country,
})
if err != nil {
return nil, query.CursorUserID, false, err
}
return resp.GetUserIds(), resp.GetNextCursorUserId(), resp.GetDone(), nil
}