dawarich/app/jobs/data_migrations/migrate_places_lonlat_job.rb
2025-11-22 13:28:38 +01:00

29 lines
1 KiB
Ruby

# frozen_string_literal: true
class DataMigrations::MigratePlacesLonlatJob < ApplicationJob
queue_as :data_migrations
def perform(user_id)
user = User.find(user_id)
# Find all places with nil lonlat
places_to_update = user.visited_places.where(lonlat: nil)
# For each place, set the lonlat value based on longitude and latitude
places_to_update.find_each do |place|
next if place.longitude.nil? || place.latitude.nil?
# Set the lonlat to a PostGIS point with the proper SRID
# rubocop:disable Rails/SkipsModelValidations
place.update_column(:lonlat, "SRID=4326;POINT(#{place.longitude} #{place.latitude})")
# rubocop:enable Rails/SkipsModelValidations
end
# Double check if there are any remaining places without lonlat
remaining = user.visited_places.where(lonlat: nil)
return unless remaining.exists?
# Log an error for these places
Rails.logger.error("Places with ID #{remaining.pluck(:id).join(', ')} for user #{user.id} could not be updated with lonlat values")
end
end