otwarchive-symphonyarchive/lib/tasks/load_autocomplete_data.rake
2026-03-11 22:22:11 +00:00

122 lines
4.4 KiB
Ruby

namespace :autocomplete do
# we need to delete the keys in batches to avoid stack level too deep error
KEYSLICE_SIZE = 10_000
desc "Clear autocomplete data"
task(clear_data: :environment) do
keys = REDIS_AUTOCOMPLETE.keys("autocomplete_*")
keys.each_slice(KEYSLICE_SIZE) { |keyslice| REDIS_AUTOCOMPLETE.del(*keyslice) }
puts "Cleared all autocomplete data"
end
desc "Load data into Redis for autocomplete"
task(load_data: [:load_tag_data, :load_pseud_data, :load_collection_data, :load_tagset_data, :load_association_data]) do
puts "Loaded all autocomplete data"
end
desc "Clear and reload data into Redis for autocomplete"
task(reload_data: [:clear_data, :load_data]) do
puts "Finished reloading"
end
desc "Clear tag data"
task(clear_tag_data: :environment) do
keys = REDIS_AUTOCOMPLETE.keys("autocomplete_tag_*") + REDIS_AUTOCOMPLETE.keys("autocomplete_fandom_*")
keys.each_slice(KEYSLICE_SIZE) { |keyslice| REDIS_AUTOCOMPLETE.del(*keyslice) }
end
desc "Clear tagset data"
task(clear_tagset_data: :environment) do
keys = REDIS_AUTOCOMPLETE.keys("autocomplete_tagset_*")
keys.each_slice(KEYSLICE_SIZE) { |keyslice| REDIS_AUTOCOMPLETE.del(*keyslice) }
end
desc "Clear tagset association data"
task(clear_association_data: :environment) do
keys = REDIS_AUTOCOMPLETE.keys("autocomplete_association_*")
keys.each_slice(KEYSLICE_SIZE) { |keyslice| REDIS_AUTOCOMPLETE.del(*keyslice) }
end
desc "Clear pseud data"
task(clear_pseud_data: :environment) do
keys = REDIS_AUTOCOMPLETE.keys("autocomplete_pseud_*")
keys.each_slice(KEYSLICE_SIZE) { |keyslice| REDIS_AUTOCOMPLETE.del(*keyslice) }
end
desc "Clear collection data"
task(clear_collection_data: :environment) do
keys = REDIS_AUTOCOMPLETE.keys("autocomplete_collection_*")
keys.each_slice(KEYSLICE_SIZE) { |keyslice| REDIS_AUTOCOMPLETE.del(*keyslice) }
end
desc "Load tag data into Redis for autocomplete"
task(load_tag_data: :environment) do
(Tag::TYPES - ['Banned']).each do |type|
query = type.constantize.canonical
query = query.includes(:parents) if type == "Character" || type == "Relationship"
query.find_each do |tag|
tag.add_to_autocomplete
end
end
end
desc "Load pseud data into Redis for autocomplete"
task(load_pseud_data: :environment) do
Pseud.not_orphaned.includes(:user).find_each do |pseud|
pseud.add_to_autocomplete
end
end
desc "Load collection data into Redis for autocomplete"
task(load_collection_data: :environment) do
Collection.with_item_count.includes(:collection_preference).find_each do |collection|
collection.add_to_autocomplete(collection.item_count)
end
end
desc "Load tagsets into Redis"
task(load_tagset_data: :environment) do
# we only load tagsets used in challenge settings, not ones used in
# individual signups
OwnedTagSet.includes(tag_set: :tags).find_each do |owned_tag_set|
# this is just a check to save from the seed db missing tag sets
next if owned_tag_set.tag_set.nil?
owned_tag_set.tag_set.add_to_autocomplete
end
end
desc "Load tag set associations into Redis"
task(load_association_data: :environment) do
# TODO: we probably only want to load associations for
# tag sets being used in challenges that are open for
# signups.
TagSetAssociation.includes(:owned_tag_set, :tag, :parent_tag).find_each do |assoc|
assoc.add_to_autocomplete
end
end
desc "Clear and reload tag data into Redis for autocomplete"
task(reload_tag_data: [:clear_tag_data, :load_tag_data]) do
puts "Finished reloading tags"
end
desc "Clear and reload pseud data into Redis for autocomplete"
task(reload_pseud_data: [:clear_pseud_data, :load_pseud_data]) do
puts "Finished reloading pseuds"
end
desc "Clear and reload collection data into Redis for autocomplete"
task(reload_collection_data: [:clear_collection_data, :load_collection_data]) do
puts "Finished reloading collections"
end
desc "Clear and reload tagset data into Redis for autocomplete"
task(reload_tagset_data: [:clear_tagset_data, :load_tagset_data]) do
puts "Finished reloading tagsets"
end
desc "Clear and reload tag set association data into Redis for autocomplete"
task(reload_association_data: [:clear_association_data, :load_association_data]) do
puts "Finished reloading tag set associations"
end
end