diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
commit | 6ed4ec3e0b1340f96b7c043ef51d1b33bbe85fde (patch) | |
tree | dc4d20fe6064752c0bd323187252c77e0a89144b /app/graphql/resolvers/environments/last_deployment_resolver.rb | |
parent | 9868dae7fc0655bd7ce4a6887d4e6d487690eeed (diff) |
Add latest changes from gitlab-org/gitlab@15-4-stable-eev15.4.0-rc42
Diffstat (limited to 'app/graphql/resolvers/environments/last_deployment_resolver.rb')
-rw-r--r-- | app/graphql/resolvers/environments/last_deployment_resolver.rb | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/app/graphql/resolvers/environments/last_deployment_resolver.rb b/app/graphql/resolvers/environments/last_deployment_resolver.rb new file mode 100644 index 00000000000..76f80112673 --- /dev/null +++ b/app/graphql/resolvers/environments/last_deployment_resolver.rb @@ -0,0 +1,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 |