diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-20 14:18:08 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-20 14:18:08 +0300 |
commit | 5afcbe03ead9ada87621888a31a62652b10a7e4f (patch) | |
tree | 9918b67a0d0f0bafa6542e839a8be37adf73102d /lib/gitlab/pagination | |
parent | c97c0201564848c1f53226fe19d71fdcc472f7d0 (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.rb | 31 | ||||
-rw-r--r-- | lib/gitlab/pagination/keyset/cursor_based_request_context.rb | 8 |
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 |