2020-12-07 22:09:37 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Resolvers
|
|
|
|
class UserDiscussionsCountResolver < BaseResolver
|
|
|
|
include Gitlab::Graphql::Authorize::AuthorizeResource
|
|
|
|
|
|
|
|
type GraphQL::INT_TYPE, null: true
|
|
|
|
|
|
|
|
def resolve
|
|
|
|
authorize!(object)
|
|
|
|
|
2020-12-11 16:10:13 -05:00
|
|
|
BatchLoader::GraphQL.for(object.id).batch do |ids, loader, args|
|
|
|
|
counts = Note.count_for_collection(ids, object.class.name, 'COUNT(DISTINCT discussion_id) as count').index_by(&:noteable_id)
|
2020-12-07 22:09:37 -05:00
|
|
|
|
|
|
|
ids.each do |id|
|
|
|
|
loader.call(id, counts[id]&.count || 0)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def authorized_resource?(object)
|
2020-12-11 16:10:13 -05:00
|
|
|
ability = "read_#{object.class.name.underscore}".to_sym
|
|
|
|
context[:current_user].present? && Ability.allowed?(context[:current_user], ability, object)
|
2020-12-07 22:09:37 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|