Files
redux-scraper/rake/indexed_posts.rake
2024-12-25 21:53:47 +00:00

45 lines
1.5 KiB
Ruby

namespace :indexed_posts do
desc "Ensure all Domain::*::Post records have an IndexedPost record"
task ensure_all_posts: %i[ensure_fa_posts ensure_e621_posts ensure_ib_posts]
desc "Ensure all Domain::Fa::Post records have an IndexedPost record"
task ensure_fa_posts: %i[environment set_logger_stdout] do
IndexedPostsRake.ensure_indexed_post_on(
IndexedPostsRake.model_without_indexed_post(Domain::Fa::Post),
)
end
desc "Ensure all Domain::E621::Post records have an IndexedPost record"
task ensure_e621_posts: %i[environment set_logger_stdout] do
IndexedPostsRake.ensure_indexed_post_on(
IndexedPostsRake.model_without_indexed_post(Domain::E621::Post),
)
end
desc "Ensure all Domain::Inkbunny::Post records have an IndexedPost record"
task ensure_ib_posts: %i[environment set_logger_stdout] do
IndexedPostsRake.ensure_indexed_post_on(
IndexedPostsRake.model_without_indexed_post(Domain::Inkbunny::Post),
)
end
end
module IndexedPostsRake
def self.model_without_indexed_post(model)
model.left_outer_joins(:indexed_post).where(indexed_posts: { id: nil })
end
def self.ensure_indexed_post_on(relation)
total = relation.count
Rails.logger.info(
"Ensuring indexed post on #{relation.name.bold} (#{total} total to process)",
)
progress = ProgressBar.create(total: total, throttle_rate: 0.2)
relation.find_each do |post|
post.ensure_indexed_post!
post.save!
progress.increment
end
end
end