pre-fetch user/date for each report

This commit is contained in:
Joffrey JAFFEUX 2024-12-11 22:38:58 +01:00
parent 925cfeffd1
commit 52acb18ff0
2 changed files with 21 additions and 2 deletions

View File

@ -4,10 +4,19 @@ module DiscourseRewind
class Rewind::Action::CreatePostsCountReport < Service::ActionBase class Rewind::Action::CreatePostsCountReport < Service::ActionBase
option :params option :params
option :guardian option :guardian
option :date
option :user
delegate :username, :year, to: :params, private: true delegate :username, :year, to: :params, private: true
def call def call
p date
p user
p guardian
p username
p year
p params
{ data: { count: 5 }, identifier: "posts-count-report" } { data: { count: 5 }, identifier: "posts-count-report" }
end end
end end

View File

@ -35,16 +35,26 @@ module DiscourseRewind
validates :username, presence: true validates :username, presence: true
end end
model :user
model :date
model :reports model :reports
private private
def fetch_reports(params:, guardian:) def fetch_user(params:)
User.find_by_username(params.username)
end
def fetch_date(params:)
Date.new(params.year).all_year
end
def fetch_reports(params:, date:, user:, guardian:)
key = "rewind:#{params.username}:#{params.year}" key = "rewind:#{params.username}:#{params.year}"
reports = Discourse.redis.get(key) reports = Discourse.redis.get(key)
if Rails.env.development? || !reports if Rails.env.development? || !reports
reports = REPORTS.map { |report| report.call(params:, guardian:) } reports = REPORTS.map { |report| report.call(params:, date:, user:, guardian:) }
Discourse.redis.setex(key, CACHE_DURATION, MultiJson.dump(reports)) Discourse.redis.setex(key, CACHE_DURATION, MultiJson.dump(reports))
else else
reports = MultiJson.load(reports, symbolize_keys: true) reports = MultiJson.load(reports, symbolize_keys: true)