gitlab-org--gitlab-foss/app/graphql/mutations/ci/runner/bulk_delete.rb

55 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module Mutations
module Ci
module Runner
class BulkDelete < BaseMutation
graphql_name 'BulkRunnerDelete'
RunnerID = ::Types::GlobalIDType[::Ci::Runner]
argument :ids, [RunnerID],
required: false,
description: 'IDs of the runners to delete.'
field :deleted_count,
::GraphQL::Types::Int,
null: true,
description: 'Number of records effectively deleted. ' \
'Only present if operation was performed synchronously.'
field :deleted_ids,
[RunnerID],
null: true,
description: 'IDs of records effectively deleted. ' \
'Only present if operation was performed synchronously.'
def resolve(**runner_attrs)
raise_resource_not_available_error! unless Ability.allowed?(current_user, :delete_runners)
if ids = runner_attrs[:ids]
runners = find_all_runners_by_ids(model_ids_of(ids))
result = ::Ci::Runners::BulkDeleteRunnersService.new(runners: runners).execute
result.payload.slice(:deleted_count, :deleted_ids).merge(errors: [])
else
{ errors: [] }
end
end
private
def model_ids_of(ids)
ids.filter_map { |gid| gid.model_id.to_i }
end
def find_all_runners_by_ids(ids)
return ::Ci::Runner.none if ids.blank?
::Ci::Runner.id_in(ids)
end
end
end
end
end