Stop caching trade users on item page

Idk this one might actually be a bit of a pain to load? But I'd want to optimize it differently anyway, and there's overhauls we're already planning to do here.
This commit is contained in:
Matchu 2023-08-02 12:25:57 -07:00
parent caa0859a2d
commit 2de9e9f45a
6 changed files with 9 additions and 62 deletions

View file

@ -1,20 +0,0 @@
class ClosetHangerObserver < ActionController::Caching::Sweeper
extend FragmentExpiration
def after_create(hanger)
self.class.expire_item_trade_hangers(hanger) if hanger.trading?
end
def after_update(hanger)
self.class.expire_item_trade_hangers(hanger) if hanger.list_id_changed?
end
def after_destroy(hanger)
self.class.expire_item_trade_hangers(hanger) if hanger.trading?
end
def self.expire_item_trade_hangers(hanger)
expire_fragment_in_all_locales("items/#{hanger.item_id} trade_hangers")
expire_fragment_in_all_locales("items/#{hanger.item_id} trade_hangers owned=#{hanger.owned}")
end
end

View file

@ -1,7 +1,6 @@
class ClosetList < ActiveRecord::Base class ClosetList < ActiveRecord::Base
belongs_to :user belongs_to :user
has_many :hangers, :class_name => 'ClosetHanger', :foreign_key => 'list_id' has_many :hangers, :class_name => 'ClosetHanger', :foreign_key => 'list_id'
# Nullification of associated records occurs in the ClosetListObserver.
validates :name, :presence => true, :uniqueness => {:scope => :user_id} validates :name, :presence => true, :uniqueness => {:scope => :user_id}
validates :user, :presence => true validates :user, :presence => true

View file

@ -1,18 +0,0 @@
class ClosetListObserver < ActionController::Caching::Sweeper
include FragmentExpiration
def after_update(list)
expire_all_items_trade_hangers(list) if list.trading_changed?
end
def before_destroy(list)
# Nullify all the child records explicitly, which will in turn trigger
# their update callbacks and expire their items' caches. This occurs in the
# same transaction as the list's destruction.
list.hangers.each { |h| h.list_id = nil; h.save! }
end
def expire_all_items_trade_hangers(list)
list.hangers.each { |h| ClosetHangerObserver.expire_item_trade_hangers(h) }
end
end

View file

@ -1,8 +0,0 @@
class UserSweeper < ActionController::Caching::Sweeper
observe User
def after_update(user)
# Delegate null-list sweeping to the ClosetListObserver.
null_lists = [true, false].map { |owned| user.null_closet_list(owned) }
null_lists.each { |list| ClosetListObserver.instance.after_update(list) }
end
end

View file

@ -59,17 +59,15 @@
- else - else
= list_zones @restricted_zones = list_zones @restricted_zones
- localized_cache "items/#{@item.id} trade_hangers" do #trade-hangers
#trade-hangers - [true, false].each do |owned|
- [true, false].each do |owned| %p
- localized_cache "items/#{@item.id} trade_hangers owned=#{owned}" do %strong
%p = trading_closet_hangers_header(owned, @trading_closet_hangers_by_owned[owned].size)
%strong = render_trading_closet_hangers(owned)
= trading_closet_hangers_header(owned, @trading_closet_hangers_by_owned[owned].size) %span.toggle
= render_trading_closet_hangers(owned) %span.more= t '.trading_closet_hangers.show_more'
%span.toggle %span.less= t '.trading_closet_hangers.show_less'
%span.more= t '.trading_closet_hangers.show_more'
%span.less= t '.trading_closet_hangers.show_less'
#item-preview-header #item-preview-header
%h3= t '.preview.header' %h3= t '.preview.header'

View file

@ -12,10 +12,6 @@ module OpenneoImpressItems
# Application configuration should go into files in config/initializers # Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded. # -- all .rb files in that directory are automatically loaded.
# Activate observers that should always be running
config.active_record.observers = [:closet_hanger_observer,
:closet_list_observer, :user_sweeper]
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)' # config.time_zone = 'Central Time (US & Canada)'