# 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