# frozen_string_literal: true class PrecomputeFeedService < BaseService LIMIT = FeedManager::MAX_ITEMS / 4 def call(account) @account = account populate_feed end private attr_reader :account def populate_feed redis.pipelined do statuses.each do |status| process_status(status) end redis.del("account:#{@account.id}:regeneration") end end def process_status(status) add_status_to_feed(status) unless status_filtered?(status) end def add_status_to_feed(status) redis.zadd(account_home_key, status.id, status.reblog? ? status.reblog_of_id : status.id) end def status_filtered?(status) FeedManager.instance.filter?(:home, status, account.id) end def account_home_key FeedManager.instance.key(:home, account.id) end def statuses Status.as_home_timeline(account).order(account_id: :desc).limit(LIMIT) end def redis Redis.current end end