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:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-09-20 14:18:08 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-09-20 14:18:08 +0300
commit5afcbe03ead9ada87621888a31a62652b10a7e4f (patch)
tree9918b67a0d0f0bafa6542e839a8be37adf73102d /lib/gitlab/pagination
parentc97c0201564848c1f53226fe19d71fdcc472f7d0 (diff)
Add latest changes from gitlab-org/gitlab@16-4-stable-eev16.4.0-rc42
Diffstat (limited to 'lib/gitlab/pagination')
-rw-r--r--lib/gitlab/pagination/cursor_based_keyset.rb31
-rw-r--r--lib/gitlab/pagination/keyset/cursor_based_request_context.rb8
2 files changed, 36 insertions, 3 deletions
diff --git a/lib/gitlab/pagination/cursor_based_keyset.rb b/lib/gitlab/pagination/cursor_based_keyset.rb
index ee8259cc671..592f635c14e 100644
--- a/lib/gitlab/pagination/cursor_based_keyset.rb
+++ b/lib/gitlab/pagination/cursor_based_keyset.rb
@@ -10,6 +10,20 @@ module Gitlab
::Packages::BuildInfo => { id: :desc }
}.freeze
+ SUPPORTED_MULTI_ORDERING = {
+ Group => { name: [:asc] },
+ AuditEvent => { id: [:desc] },
+ User => {
+ id: [:asc, :desc],
+ name: [:asc, :desc],
+ username: [:asc, :desc],
+ created_at: [:asc, :desc],
+ updated_at: [:asc, :desc]
+ },
+ ::Ci::Build => { id: [:desc] },
+ ::Packages::BuildInfo => { id: [:desc] }
+ }.freeze
+
# Relation types that are enforced in this list
# enforce the use of keyset pagination, thus erroring out requests
# made with offset pagination above a certain limit.
@@ -19,7 +33,11 @@ module Gitlab
ENFORCED_TYPES = [Group].freeze
def self.available_for_type?(relation)
- SUPPORTED_ORDERING.key?(relation.klass)
+ if Feature.enabled?(:api_keyset_pagination_multi_order)
+ SUPPORTED_MULTI_ORDERING.key?(relation.klass)
+ else
+ SUPPORTED_ORDERING.key?(relation.klass)
+ end
end
def self.available?(cursor_based_request_context, relation)
@@ -32,9 +50,16 @@ module Gitlab
end
def self.order_satisfied?(relation, cursor_based_request_context)
- order_by_from_request = cursor_based_request_context.order_by
+ if Feature.enabled?(:api_keyset_pagination_multi_order)
+ order_by_from_request = cursor_based_request_context.order
+ sort_from_request = cursor_based_request_context.sort
+
+ SUPPORTED_MULTI_ORDERING[relation.klass][order_by_from_request]&.include?(sort_from_request)
+ else
+ order_by_from_request = cursor_based_request_context.order_by
- SUPPORTED_ORDERING[relation.klass] == order_by_from_request
+ SUPPORTED_ORDERING[relation.klass] == order_by_from_request
+ end
end
private_class_method :order_satisfied?
end
diff --git a/lib/gitlab/pagination/keyset/cursor_based_request_context.rb b/lib/gitlab/pagination/keyset/cursor_based_request_context.rb
index 41b90846345..f90574c86ab 100644
--- a/lib/gitlab/pagination/keyset/cursor_based_request_context.rb
+++ b/lib/gitlab/pagination/keyset/cursor_based_request_context.rb
@@ -32,6 +32,14 @@ module Gitlab
def order_by
{ (params[:order_by]&.to_sym || DEFAULT_SORT_COLUMN) => (params[:sort]&.to_sym || DEFAULT_SORT_DIRECTION) }
end
+
+ def order
+ params[:order_by]&.to_sym || DEFAULT_SORT_COLUMN
+ end
+
+ def sort
+ params[:sort]&.to_sym || DEFAULT_SORT_DIRECTION
+ end
end
end
end