refactor(service): concurrent prefill API calls
This commit is contained in:
parent
065d380b70
commit
7742703081
2 changed files with 19 additions and 11 deletions
|
@ -68,7 +68,7 @@ class RecoveriesController < ApplicationController
|
||||||
def structure_name
|
def structure_name
|
||||||
# we know that the structure exists because
|
# we know that the structure exists because
|
||||||
# of the ensure_collectivite_territoriale guard
|
# of the ensure_collectivite_territoriale guard
|
||||||
APIRechercheEntreprisesService.new.(siret:).value![:nom_complet]
|
APIRechercheEntreprisesService.new.call(siret:).value![:nom_complet]
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_agent_connect_is_used
|
def ensure_agent_connect_is_used
|
||||||
|
|
|
@ -5,9 +5,22 @@ module PrefillableFromServicePublicConcern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
def prefill_from_siret
|
def prefill_from_siret
|
||||||
result_sp = AnnuaireServicePublicService.new.(siret:)
|
future_sp = Concurrent::Future.execute { AnnuaireServicePublicService.new.call(siret:) }
|
||||||
|
future_api_ent = Concurrent::Future.execute { APIRechercheEntreprisesService.new.call(siret:) }
|
||||||
|
|
||||||
case result_sp
|
result_sp = future_sp.value!
|
||||||
|
result_api_ent = future_api_ent.value!
|
||||||
|
|
||||||
|
prefill_from_service_public(result_sp)
|
||||||
|
prefill_from_api_entreprise(result_api_ent)
|
||||||
|
|
||||||
|
[result_sp, result_api_ent]
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def prefill_from_service_public(result)
|
||||||
|
case result
|
||||||
in Dry::Monads::Success(data)
|
in Dry::Monads::Success(data)
|
||||||
self.nom = data[:nom] if nom.blank?
|
self.nom = data[:nom] if nom.blank?
|
||||||
self.email = data[:adresse_courriel] if email.blank?
|
self.email = data[:adresse_courriel] if email.blank?
|
||||||
|
@ -17,24 +30,19 @@ module PrefillableFromServicePublicConcern
|
||||||
else
|
else
|
||||||
# NOOP
|
# NOOP
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
result_api_ent = APIRechercheEntreprisesService.new.call(siret:)
|
def prefill_from_api_entreprise(result)
|
||||||
case result_api_ent
|
case result
|
||||||
in Dry::Monads::Success(data)
|
in Dry::Monads::Success(data)
|
||||||
self.type_organisme = detect_type_organisme(data) if type_organisme.blank?
|
self.type_organisme = detect_type_organisme(data) if type_organisme.blank?
|
||||||
|
|
||||||
# some services (etablissements, …) are not in service public, so we also try to prefill them with API Entreprise
|
|
||||||
self.nom = data[:nom_complet] if nom.blank?
|
self.nom = data[:nom_complet] if nom.blank?
|
||||||
self.adresse = data.dig(:siege, :geo_adresse) if adresse.blank?
|
self.adresse = data.dig(:siege, :geo_adresse) if adresse.blank?
|
||||||
else
|
else
|
||||||
# NOOP
|
# NOOP
|
||||||
end
|
end
|
||||||
|
|
||||||
[result_sp, result_api_ent]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def denormalize_plage_ouverture(data)
|
def denormalize_plage_ouverture(data)
|
||||||
return if data.blank?
|
return if data.blank?
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue