hensei-api/lib/post_deployment/search_indexer.rb
Justin Edmund ad2e2cc028
More embed image bandaids (#175)
* Only re-index search when records are updated

* Add logs and fixes

* Add preview_s3_key to Parties

* Add some extra packages to Nixfile

* Add logging around custom font use
2025-01-18 22:32:13 -08:00

72 lines
1.8 KiB
Ruby

# frozen_string_literal: true
require_relative '../logging_helper'
module PostDeployment
class SearchIndexer
include LoggingHelper
def initialize(test_mode:, verbose:, new_records: {})
@test_mode = test_mode
@verbose = verbose
@new_records = new_records
end
def rebuild_all
log_header 'Rebuilding search indices...', '-'
puts "\n"
ensure_models_loaded
rebuild_indices
end
private
def ensure_models_loaded
Rails.application.eager_load! if Rails.application.config.eager_load
end
def rebuild_indices
searchable_models.each do |model_name|
begin
model = model_name.constantize
rebuild_index_for(model)
rescue NameError => e
log_error("Could not load model: #{model_name}")
log_error(e.message) if @verbose
end
end
end
def rebuild_index_for(model)
# Determine model type (lowercase, pluralized)
model_type = model.name.downcase.pluralize
# Check if there are new records for this model type
new_records = @new_records[model_type] || []
if @test_mode
log_step "Would rebuild search index for #{model.name}" if new_records.any?
else
if new_records.any?
log_verbose "#{model.name}... "
PgSearch::Multisearch.rebuild(model)
log_verbose "✅ done! (#{new_records.size} new records)\n"
else
log_step "Skipping #{model.name} - no new records" if @verbose
end
end
rescue StandardError => e
log_error("Failed to rebuild index for #{model.name}: #{e.message}")
log_error(e.backtrace.take(5).join("\n")) if @verbose
end
def searchable_models
%w[Character Summon Weapon Job]
end
def log_error(message)
puts "#{message}"
end
end
end