Commit 9aa64965 authored by James Lopez's avatar James Lopez

refactor activity and activity set, and fixed spec

parent e913cf3f
...@@ -3,17 +3,13 @@ module Gitlab ...@@ -3,17 +3,13 @@ module Gitlab
class Activity class Activity
attr_reader :username attr_reader :username
def self.from_array(activities)
activities.map { |activity| new(*activity) }
end
def initialize(username, time) def initialize(username, time)
@username = username @username = username
@time = time @time = time
end end
def date def lat_activity_at
@date ||= Time.at(@time).utc.to_datetime @lat_activity_at ||= Time.at(@time).to_s(:db)
end end
end end
end end
......
module Gitlab module Gitlab
module User module User
class ActivitySet class ActivitySet
include Gitlab::PaginationUtil
KEY = 'user/activities' KEY = 'user/activities'
DEFAULT_PAGE_SIZE = 50 DEFAULT_FROM = 6.months.ago.to_i
DEFAULT_FROM = 1.year.ago
attr_reader :page, :per_page
def self.record(user) def self.record(user)
Gitlab::Redis.with do |redis| Gitlab::Redis.with do |redis|
...@@ -11,26 +14,45 @@ module Gitlab ...@@ -11,26 +14,45 @@ module Gitlab
end end
end end
def self.query(*args) def initialize(from:, page:, per_page:)
new(*args).query @from = sanitize_date(from)
@to = Time.now.to_i
@page = page
@per_page = per_page
end end
def initialize(from:, page:, per_page:) def activities
@from = from || DEFAULT_FROM @activities ||= raw_activities.map { |activity| Activity.new(*activity) }
@page = page || 0 end
@per_page = per_page || DEFAULT_PAGE_SIZE
private
def sanitize_date(date)
Time.strptime(date, "%Y-%m-%d").to_i
rescue TypeError, ArgumentError
DEFAULT_FROM
end
def pagination_delegate
@pagination_delegate ||= Gitlab::PaginationDelegate.new(page: @page,
per_page: @per_page,
count: count)
end end
def query def raw_activities
Gitlab::Redis.with do |redis| Gitlab::Redis.with do |redis|
redis.zrangebyscore(KEY, @from.to_i, Time.now.to_i, with_scores: true, limit: [offset, @per_page]) redis.zrangebyscore(KEY,
@from,
@to,
with_scores: true,
limit: [pagination_delegate.offset, pagination_delegate.limit_value])
end end
end end
private def count
Gitlab::Redis.with do |redis|
def offset redis.zcount(KEY, @from, @to)
@page * @per_page end
end end
end end
end end
......
...@@ -39,7 +39,7 @@ describe Gitlab::User::ActivitySet, :redis, lib: true do ...@@ -39,7 +39,7 @@ describe Gitlab::User::ActivitySet, :redis, lib: true do
end end
end end
context 'filter by date'do context 'filter by date' do
before do before do
Timecop.freeze(Date.yesterday) Timecop.freeze(Date.yesterday)
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment