demarches-normaliennes/app/models/concerns/rna_champ_association_fetchable_concern.rb

34 lines
991 B
Ruby
Raw Normal View History

# frozen_string_literal: true
module RNAChampAssociationFetchableConcern
extend ActiveSupport::Concern
2023-01-14 11:53:55 +01:00
attr_reader :association_fetch_error_key
def fetch_association!(rna)
self.value = rna
2023-01-14 11:53:55 +01:00
return clear_association!(:empty) if rna.empty?
return clear_association!(:invalid) unless valid_champ_value?
2023-01-14 11:53:55 +01:00
return clear_association!(:not_found) if (data = APIEntreprise::RNAAdapter.new(rna, procedure_id).to_params).blank?
update!(data:, value_json: APIGeoService.parse_rna_address(data['adresse']))
rescue APIEntreprise::API::Error, APIEntrepriseToken::TokenError => error
if APIEntrepriseService.service_unavailable_error?(error, target: :djepva)
clear_association!(:network_error)
else
Sentry.capture_exception(error, extra: { dossier_id:, rna: })
clear_association!(nil)
end
2023-01-14 11:53:55 +01:00
end
private
def clear_association!(error)
@association_fetch_error_key = error
self.data = nil
save(validate: false)
2023-01-14 11:53:55 +01:00
false
end
end