Files
redux-scraper/lib/tasks/counters.rake
2025-06-17 05:56:11 +00:00

80 lines
2.4 KiB
Ruby

namespace :counters do
# Generic counter reset helper that works with any model
def reset_model_counters(model_class, counter_names, batch_size: 1000)
counter_names = Array(counter_names)
model_name = model_class.name.demodulize.underscore
counter_desc =
counter_names
.map { |n| n.to_s.sub("#{model_name}_", "").sub("user_", "") }
.join(" and ")
total = model_class.count
puts "Resetting #{counter_desc} counter cache for #{total} #{model_name.pluralize}..."
pb = ProgressBar.create(total: total, format: "%t: %c/%C %B %p%% %a %e")
model_class
.pluck(:id)
.each_slice(batch_size) do |ids|
model_class.transaction do
ids.each do |id|
model_class.reset_counters(id, *counter_names)
pb.increment
end
end
end
puts "Done!"
end
namespace :domain do
namespace :user do
def reset_user_counters(counter_names)
reset_model_counters(Domain::User, counter_names)
end
desc "Reset all user counter caches"
task all: :environment do
reset_user_counters(
%i[
user_post_creations
user_post_favs
user_user_follows_from
user_user_follows_to
],
)
end
desc "Reset post-related counter caches only (creations and favs)"
task posts: :environment do
reset_user_counters(%i[user_post_creations user_post_favs])
end
desc "Reset follow-related counter caches only (follows_from and follows_to)"
task follows: :environment do
reset_user_counters(%i[user_user_follows_from user_user_follows_to])
end
desc "Reset user_post_creations_count counter cache"
task user_post_creations_count: :environment do
reset_user_counters(:user_post_creations)
end
desc "Reset user_post_favs_count counter cache"
task user_post_favs_count: :environment do
reset_user_counters(:user_post_favs)
end
desc "Reset user_user_follows_from_count counter cache"
task user_user_follows_from_count: :environment do
reset_user_counters(:user_user_follows_from)
end
desc "Reset user_user_follows_to_count counter cache"
task user_user_follows_to_count: :environment do
reset_user_counters(:user_user_follows_to)
end
end
end
end