BatchGetUsers get users in batch.
(ctx context.Context, request *connect.Request[v1pb.BatchGetUsersRequest])
| 81 | |
| 82 | // BatchGetUsers get users in batch. |
| 83 | func (s *UserService) BatchGetUsers(ctx context.Context, request *connect.Request[v1pb.BatchGetUsersRequest]) (*connect.Response[v1pb.BatchGetUsersResponse], error) { |
| 84 | // Extract and validate emails from names |
| 85 | emails := make([]string, 0, len(request.Msg.Names)) |
| 86 | for _, name := range request.Msg.Names { |
| 87 | email, err := common.GetUserEmail(name) |
| 88 | if err != nil { |
| 89 | return nil, connect.NewError(connect.CodeInvalidArgument, err) |
| 90 | } |
| 91 | if err := validateEndUserEmail(email); err != nil { |
| 92 | return nil, err |
| 93 | } |
| 94 | emails = append(emails, email) |
| 95 | } |
| 96 | |
| 97 | // Only scope to workspace IAM in SaaS mode. |
| 98 | var workspace string |
| 99 | if s.profile.SaaS { |
| 100 | workspace = common.GetWorkspaceIDFromContext(ctx) |
| 101 | } |
| 102 | users, err := s.store.BatchGetUsersByEmails(ctx, workspace, emails) |
| 103 | if err != nil { |
| 104 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to batch get users")) |
| 105 | } |
| 106 | |
| 107 | // Build a map for quick lookup |
| 108 | response := &v1pb.BatchGetUsersResponse{} |
| 109 | for _, user := range users { |
| 110 | v1User, err := convertToUser(ctx, s.iamManager, user) |
| 111 | if err != nil { |
| 112 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to convert user")) |
| 113 | } |
| 114 | response.Users = append(response.Users, v1User) |
| 115 | } |
| 116 | |
| 117 | return connect.NewResponse(response), nil |
| 118 | } |
| 119 | |
| 120 | // GetCurrentUser gets the current authenticated user. |
| 121 | func (s *UserService) GetCurrentUser(ctx context.Context, _ *connect.Request[emptypb.Empty]) (*connect.Response[v1pb.User], error) { |
nothing calls this directly
no test coverage detected