0
0
Fork 0

Fix trends returning less results per page when filtered in REST API (#17996)

- Change filtering and pagination to occur in SQL instead of Redis
- Change rank/score displayed on trends in admin UI to be locale-specific
This commit is contained in:
Eugen Rochko 2022-04-08 17:10:53 +02:00 committed by GitHub
parent 6b72641641
commit fd9a9b07c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 31 deletions

View file

@ -14,8 +14,8 @@ class Trends::Query
@records = []
@loaded = false
@allowed = false
@limit = -1
@offset = 0
@limit = nil
@offset = nil
end
def allowed!
@ -73,7 +73,10 @@ class Trends::Query
if tmp_ids.empty?
klass.none
else
klass.joins("join unnest(array[#{tmp_ids.join(',')}]) with ordinality as x (id, ordering) on #{klass.table_name}.id = x.id").reorder('x.ordering')
scope = klass.joins("join unnest(array[#{tmp_ids.join(',')}]) with ordinality as x (id, ordering) on #{klass.table_name}.id = x.id").reorder('x.ordering')
scope = scope.offset(@offset) if @offset.present?
scope = scope.limit(@limit) if @limit.present?
scope
end
end
@ -93,7 +96,7 @@ class Trends::Query
end
def ids
redis.zrevrange(key, @offset, @limit.positive? ? @limit - 1 : @limit).map(&:to_i)
redis.zrevrange(key, 0, -1).map(&:to_i)
end
def perform_queries