2025-03-03 14:50:49 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
|
|
class DataMigrations::MigratePlacesLonlatJob < ApplicationJob
|
2025-07-26 19:08:29 -04:00
|
|
|
queue_as :data_migrations
|
2025-03-03 14:50:49 -05:00
|
|
|
|
|
|
|
|
def perform(user_id)
|
|
|
|
|
user = User.find(user_id)
|
|
|
|
|
|
2025-03-09 11:29:16 -04:00
|
|
|
# Find all places with nil lonlat
|
2025-11-24 13:45:09 -05:00
|
|
|
places_to_update = user.visited_places.where(lonlat: nil)
|
2025-03-09 11:29:16 -04:00
|
|
|
|
|
|
|
|
# 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
|
2025-11-24 13:45:09 -05:00
|
|
|
remaining = user.visited_places.where(lonlat: nil)
|
2025-03-09 11:29:16 -04:00
|
|
|
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")
|
2025-03-03 14:50:49 -05:00
|
|
|
end
|
|
|
|
|
end
|