mirror of
https://github.com/discourse/discourse-rewind.git
synced 2025-07-07 14:22:12 +00:00
72 lines
1.6 KiB
Ruby
72 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseRewind
|
|
# Service responsible to fetch a rewind for a username/year.
|
|
#
|
|
# @example
|
|
# ::DiscourseRewind::Rewind::Fetch.call(
|
|
# guardian: guardian
|
|
# )
|
|
#
|
|
class Rewind::Fetch
|
|
include Service::Base
|
|
|
|
# @!method self.call(guardian:, params:)
|
|
# @param [Guardian] guardian
|
|
# @param [Hash] params
|
|
# @option params [Integer] :year of the rewind
|
|
# @option params [Integer] :username of the rewind
|
|
# @return [Service::Base::Context]
|
|
|
|
CACHE_DURATION = 5.minutes
|
|
|
|
model :year
|
|
model :user
|
|
model :date
|
|
model :reports
|
|
|
|
private
|
|
|
|
def fetch_user(guardian:)
|
|
User.find_by_username(guardian.user.username)
|
|
end
|
|
|
|
def fetch_year
|
|
current_date = Time.zone.now
|
|
current_month = current_date.month
|
|
current_year = current_date.year
|
|
|
|
case current_month
|
|
when 1
|
|
current_year - 1
|
|
when 12
|
|
current_year
|
|
else
|
|
false
|
|
end
|
|
end
|
|
|
|
def fetch_date(params:, year:)
|
|
Date.new(year).all_year
|
|
end
|
|
|
|
def fetch_reports(date:, user:, guardian:, year:)
|
|
# key = "rewind:#{guardian.user.username}:#{year}"
|
|
# reports = Discourse.redis.get(key)
|
|
|
|
# if Rails.env.development? || !reports
|
|
reports =
|
|
::DiscourseRewind::Rewind::Action::BaseReport
|
|
.descendants
|
|
.filter { _1.enabled? }
|
|
.map { |report| report.call(date:, user:, guardian:) }
|
|
# Discourse.redis.setex(key, CACHE_DURATION, MultiJson.dump(reports))
|
|
# else
|
|
# reports = MultiJson.load(reports.compact, symbolize_keys: true)
|
|
# end
|
|
|
|
reports
|
|
end
|
|
end
|
|
end
|