2026-05-11 01:40:29 +08:00

42 lines
1.2 KiB
Go

package client
import (
"context"
"google.golang.org/grpc"
userv1 "hyapp.local/api/proto/user/v1"
"hyapp/pkg/appcode"
)
// GRPCRegionSource reads active region IDs from user-service region master data.
type GRPCRegionSource struct {
client userv1.RegionAdminServiceClient
}
// NewGRPCRegionSource creates a region source backed by user-service gRPC.
func NewGRPCRegionSource(conn *grpc.ClientConn) *GRPCRegionSource {
return &GRPCRegionSource{client: userv1.NewRegionAdminServiceClient(conn)}
}
// ListActiveRegionIDs returns positive active region IDs; GLOBAL region 0 is not an IM region group.
func (s *GRPCRegionSource) ListActiveRegionIDs(ctx context.Context) ([]int64, error) {
resp, err := s.client.ListRegions(ctx, &userv1.ListRegionsRequest{
Meta: &userv1.RequestMeta{
RequestId: "broadcast-region-reconcile",
Caller: "activity-service",
AppCode: appcode.FromContext(ctx),
},
Status: "active",
})
if err != nil {
return nil, err
}
regionIDs := make([]int64, 0, len(resp.GetRegions()))
for _, region := range resp.GetRegions() {
if region.GetRegionId() > 0 {
regionIDs = append(regionIDs, region.GetRegionId())
}
}
return regionIDs, nil
}