package user import ( "context" "hyapp/pkg/xerr" userdomain "hyapp/services/user-service/internal/domain/user" ) const maxAdminProfileBatchSize = 500 // BatchGetUserAdminProfiles 一次读取后台列表所需的 user-service owner 事实。 // 调用方必须按返回 map 的 key 处理缺失用户,不能用请求 ID 构造占位资料。 func (s *Service) BatchGetUserAdminProfiles(ctx context.Context, userIDs []int64) (map[int64]userdomain.AdminProfile, error) { if len(userIDs) == 0 { return map[int64]userdomain.AdminProfile{}, nil } if s.userRepository == nil { return nil, xerr.New(xerr.Unavailable, "user repository is not configured") } // 去重既限制 SQL IN 参数数量,也保证同一个用户的角色与封禁事实只聚合一次。 unique := make([]int64, 0, len(userIDs)) seen := make(map[int64]struct{}, len(userIDs)) for _, userID := range userIDs { if userID <= 0 { return nil, xerr.New(xerr.InvalidArgument, "user_ids contains invalid value") } if _, exists := seen[userID]; exists { continue } seen[userID] = struct{}{} unique = append(unique, userID) } if len(unique) > maxAdminProfileBatchSize { return nil, xerr.New(xerr.InvalidArgument, "user_ids exceeds batch limit") } return s.userRepository.BatchGetUserAdminProfiles(ctx, unique, s.now().UTC().UnixMilli()) }