class PDSCascadingSearchJob
Public Instance Methods
Source
# File app/jobs/pds_cascading_search_job.rb, line 9 def perform(searchable, step_name: nil, search_results: [], queue: :pds) step_name ||= :no_fuzzy_with_history SemanticLogger.tagged( searchable: "#{searchable.class.name}##{searchable.id}", step: step_name ) do result, pds_patient = search_for_patient( family_name: searchable.family_name, given_name: searchable.given_name, date_of_birth: searchable.date_of_birth, address_postcode: searchable.address_postcode, step_name: step_name ) search_result = { step: step_name, result: result, nhs_number: pds_patient&.nhs_number, created_at: Time.current }.with_indifferent_access if searchable.is_a?(PatientChangeset) searchable.search_results << search_result end search_results << search_result searchable.save! next_step = steps[step_name][result] if result == :error || next_step.nil? || next_step == :give_up || multiple_nhs_numbers_found?(search_results) || next_step == :save_nhs_number_if_unique searchable.save! if searchable.is_a?(PatientChangeset) ProcessPatientChangesetJob.perform_later(searchable.id) else PatientUpdateFromPDSJob.perform_later(searchable, search_results) end elsif next_step.in?(steps.keys) raise "Recursive step detected: #{next_step}" if next_step == step_name enqueue_next_search(searchable, next_step, search_results, queue) else raise "Unknown step: #{next_step}" end end end