Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/graphql/resolvers')
-rw-r--r--app/graphql/resolvers/base_resolver.rb2
-rw-r--r--app/graphql/resolvers/package_details_resolver.rb4
-rw-r--r--app/graphql/resolvers/packages_resolver.rb2
-rw-r--r--app/graphql/resolvers/project_merge_requests_resolver.rb33
-rw-r--r--app/graphql/resolvers/terraform/states_resolver.rb18
5 files changed, 46 insertions, 13 deletions
diff --git a/app/graphql/resolvers/base_resolver.rb b/app/graphql/resolvers/base_resolver.rb
index 539e37db1c2..5db618254cb 100644
--- a/app/graphql/resolvers/base_resolver.rb
+++ b/app/graphql/resolvers/base_resolver.rb
@@ -118,7 +118,7 @@ module Resolvers
end
def offset_pagination(relation)
- ::Gitlab::Graphql::Pagination::OffsetActiveRecordRelationConnection.new(relation)
+ ::Gitlab::Graphql::Pagination::OffsetPaginatedRelation.new(relation)
end
override :object
diff --git a/app/graphql/resolvers/package_details_resolver.rb b/app/graphql/resolvers/package_details_resolver.rb
index dcf4430e55f..e688e34599a 100644
--- a/app/graphql/resolvers/package_details_resolver.rb
+++ b/app/graphql/resolvers/package_details_resolver.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
module Resolvers
- # No return types defined because they can be different.
- # rubocop: disable Graphql/ResolverType
class PackageDetailsResolver < BaseResolver
+ type ::Types::Packages::PackageType, null: true
+
argument :id, ::Types::GlobalIDType[::Packages::Package],
required: true,
description: 'The global ID of the package.'
diff --git a/app/graphql/resolvers/packages_resolver.rb b/app/graphql/resolvers/packages_resolver.rb
index d19099e94d4..3eeed48ff7e 100644
--- a/app/graphql/resolvers/packages_resolver.rb
+++ b/app/graphql/resolvers/packages_resolver.rb
@@ -2,7 +2,7 @@
module Resolvers
class PackagesResolver < BaseResolver
- type Types::Packages::PackageType, null: true
+ type Types::Packages::PackageType.connection_type, null: true
def resolve(**args)
return unless packages_available?
diff --git a/app/graphql/resolvers/project_merge_requests_resolver.rb b/app/graphql/resolvers/project_merge_requests_resolver.rb
index 830649d5e52..21d9afc31ab 100644
--- a/app/graphql/resolvers/project_merge_requests_resolver.rb
+++ b/app/graphql/resolvers/project_merge_requests_resolver.rb
@@ -6,5 +6,38 @@ module Resolvers
accept_assignee
accept_author
accept_reviewer
+
+ def resolve(**args)
+ scope = super
+
+ if only_count_is_selected_with_merged_at_filter?(args) && Feature.enabled?(:optimized_merge_request_count_with_merged_at_filter)
+ MergeRequest::MetricsFinder
+ .new(current_user, args.merge(target_project: project))
+ .execute
+ else
+ scope
+ end
+ end
+
+ def only_count_is_selected_with_merged_at_filter?(args)
+ return unless lookahead
+
+ argument_names = args.except(:lookahead, :sort, :merged_before, :merged_after).keys
+
+ # no extra filtering arguments are provided
+ return unless argument_names.empty?
+ return unless args[:merged_after] || args[:merged_before]
+
+ # Detecting a specific query pattern:
+ # mergeRequests(mergedAfter: "X", mergedBefore: "Y") {
+ # count
+ # totalTimeToMerge
+ # }
+ allowed_selected_fields = [:count, :total_time_to_merge]
+ selected_fields = lookahead.selections.map(&:field).map(&:original_name)
+
+ # only the allowed_selected_fields are present
+ (selected_fields - allowed_selected_fields).empty?
+ end
end
end
diff --git a/app/graphql/resolvers/terraform/states_resolver.rb b/app/graphql/resolvers/terraform/states_resolver.rb
index 38b26a948b1..f543eb182e8 100644
--- a/app/graphql/resolvers/terraform/states_resolver.rb
+++ b/app/graphql/resolvers/terraform/states_resolver.rb
@@ -3,20 +3,20 @@
module Resolvers
module Terraform
class StatesResolver < BaseResolver
- type Types::Terraform::StateType, null: true
+ type Types::Terraform::StateType.connection_type, null: true
alias_method :project, :object
- def resolve(**args)
- return ::Terraform::State.none unless can_read_terraform_states?
-
- project.terraform_states.ordered_by_name
+ when_single do
+ argument :name, GraphQL::STRING_TYPE,
+ required: true,
+ description: 'Name of the Terraform state.'
end
- private
-
- def can_read_terraform_states?
- current_user.can?(:read_terraform_state, project)
+ def resolve(**args)
+ ::Terraform::StatesFinder
+ .new(project, current_user, params: args)
+ .execute
end
end
end