From 7742703081611c1a372045a6dede8da3f6d69e43 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 15 Oct 2024 18:35:18 +0200 Subject: [PATCH] refactor(service): concurrent prefill API calls --- app/controllers/recoveries_controller.rb | 2 +- ...prefillable_from_service_public_concern.rb | 28 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/app/controllers/recoveries_controller.rb b/app/controllers/recoveries_controller.rb index 6a34c3e55..0d38b4d00 100644 --- a/app/controllers/recoveries_controller.rb +++ b/app/controllers/recoveries_controller.rb @@ -68,7 +68,7 @@ class RecoveriesController < ApplicationController def structure_name # we know that the structure exists because # of the ensure_collectivite_territoriale guard - APIRechercheEntreprisesService.new.(siret:).value![:nom_complet] + APIRechercheEntreprisesService.new.call(siret:).value![:nom_complet] end def ensure_agent_connect_is_used diff --git a/app/models/concerns/prefillable_from_service_public_concern.rb b/app/models/concerns/prefillable_from_service_public_concern.rb index 4d7fb5f27..bcf4f8475 100644 --- a/app/models/concerns/prefillable_from_service_public_concern.rb +++ b/app/models/concerns/prefillable_from_service_public_concern.rb @@ -5,9 +5,22 @@ module PrefillableFromServicePublicConcern included do 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) self.nom = data[:nom] if nom.blank? self.email = data[:adresse_courriel] if email.blank? @@ -17,24 +30,19 @@ module PrefillableFromServicePublicConcern else # NOOP end + end - result_api_ent = APIRechercheEntreprisesService.new.call(siret:) - case result_api_ent + def prefill_from_api_entreprise(result) + case result in Dry::Monads::Success(data) 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.adresse = data.dig(:siege, :geo_adresse) if adresse.blank? else # NOOP end - - [result_sp, result_api_ent] end - private - def denormalize_plage_ouverture(data) return if data.blank?