2020-05-28 11:08:02 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Resolvers
|
|
|
|
class UserResolver < BaseResolver
|
2022-06-03 11:09:26 -04:00
|
|
|
include Gitlab::Graphql::Authorize::AuthorizeResource
|
|
|
|
|
2020-05-28 11:08:02 -04:00
|
|
|
description 'Retrieve a single user'
|
|
|
|
|
2020-06-02 11:08:24 -04:00
|
|
|
type Types::UserType, null: true
|
|
|
|
|
2020-10-20 08:08:54 -04:00
|
|
|
argument :id, Types::GlobalIDType[User],
|
2020-05-28 11:08:02 -04:00
|
|
|
required: false,
|
2021-01-11 19:10:42 -05:00
|
|
|
description: 'ID of the User.'
|
2020-05-28 11:08:02 -04:00
|
|
|
|
2021-07-22 08:10:04 -04:00
|
|
|
argument :username, GraphQL::Types::String,
|
2020-05-28 11:08:02 -04:00
|
|
|
required: false,
|
2021-01-11 19:10:42 -05:00
|
|
|
description: 'Username of the User.'
|
2020-05-28 11:08:02 -04:00
|
|
|
|
|
|
|
def ready?(id: nil, username: nil)
|
|
|
|
unless id.present? ^ username.present?
|
|
|
|
raise Gitlab::Graphql::Errors::ArgumentError, 'Provide either a single username or id'
|
|
|
|
end
|
|
|
|
|
|
|
|
super
|
|
|
|
end
|
2020-06-02 11:08:24 -04:00
|
|
|
|
|
|
|
def resolve(id: nil, username: nil)
|
2022-06-03 11:09:26 -04:00
|
|
|
authorize!
|
|
|
|
|
2020-06-02 11:08:24 -04:00
|
|
|
if id
|
|
|
|
GitlabSchema.object_from_id(id, expected_type: User)
|
|
|
|
else
|
|
|
|
batch_load(username)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def batch_load(username)
|
|
|
|
BatchLoader::GraphQL.for(username).batch do |usernames, loader|
|
|
|
|
User.by_username(usernames).each do |user|
|
|
|
|
loader.call(user.username, user)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2022-06-03 11:09:26 -04:00
|
|
|
|
|
|
|
def authorize!
|
|
|
|
raise_resource_not_available_error! unless context[:current_user].present?
|
|
|
|
end
|
2020-05-28 11:08:02 -04:00
|
|
|
end
|
|
|
|
end
|