blob: 76f8011267384f0b782b38c1819043c215e7af70 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# frozen_string_literal: true
module Resolvers
module Environments
class LastDeploymentResolver < BaseResolver
argument :status,
Types::DeploymentStatusEnum,
required: true,
description: 'Status of the Deployment.'
type Types::DeploymentType, null: true
def resolve(status:)
return unless object.present? && object.is_a?(::Environment)
validate!(status)
find_last_deployment(status)
end
private
def find_last_deployment(status)
BatchLoader::GraphQL.for(object).batch(key: status) do |environments, loader, args|
association_name = "last_#{args[:key]}_deployment".to_sym
Preloaders::Environments::DeploymentPreloader.new(environments)
.execute_with_union(association_name, {})
environments.each do |environment|
loader.call(environment, environment.public_send(association_name)) # rubocop:disable GitlabSecurity/PublicSend
end
end
end
def validate!(status)
unless Deployment::FINISHED_STATUSES.include?(status.to_sym) ||
Deployment::UPCOMING_STATUSES.include?(status.to_sym)
raise Gitlab::Graphql::Errors::ArgumentError, "\"#{status}\" status is not supported."
end
end
end
end
end
|