From 4354c1e771195e54c3c15423470a815eaff2697a Mon Sep 17 00:00:00 2001 From: allthesignals Date: Mon, 10 Feb 2025 11:15:42 -0500 Subject: [PATCH] Refactor Provider Search Service --- app/.env | 1 + app/app/services/provider_search_service.rb | 65 ++++++++++++++++----- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/app/.env b/app/.env index 8aeb4bed..2f0287d0 100644 --- a/app/.env +++ b/app/.env @@ -15,3 +15,4 @@ MA_WEEKLY_REPORT_RECIPIENTS=test@email.com ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=primary ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=deterministic ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=derivationsalt +SUPPORTED_PROVIDERS=pinwheel diff --git a/app/app/services/provider_search_service.rb b/app/app/services/provider_search_service.rb index dde2ee99..b91eb607 100644 --- a/app/app/services/provider_search_service.rb +++ b/app/app/services/provider_search_service.rb @@ -1,20 +1,23 @@ class ProviderSearchService PROVIDER_RESULT = Struct.new(:provider_name, :provider_options, :name, :logo_url, keyword_init: true) + SUPPORTED_PROVIDERS = (ENV["SUPPORTED_PROVIDERS"] || "pinwheel")&.split(",")&.map(&:to_sym) + def initialize(client_agency_id) - set_pinwheel(client_agency_id) - set_argyle(client_agency_id) + client_agency_config = site_config[client_agency_id] + + @providers = SUPPORTED_PROVIDERS.map do |provider| + case provider + when :pinwheel + PinwheelAdapter.new(client_agency_config.pinwheel_environment) + when :argyle + ArgyleAdapter.new(client_agency_config.argyle_environment) + end + end end def search(query = "") - [ - *@argyle.items(query)["results"].map do |result| - PROVIDER_RESULT.new(provider_name: :argyle, provider_options: { response_type: result["kind"], provider_id: result["id"] }, name: result["name"], logo_url: result["logo_url"]) - end, - *@pinwheel.fetch_items(q: query)["data"].map do |result| - PROVIDER_RESULT.new(provider_name: :pinwheel, provider_options: { response_type: result["response_type"], provider_id: result["id"] }, name: result["name"], logo_url: result["logo_url"]) - end - ] + @providers.map { |provider| provider.query(query) }.flatten end private @@ -23,13 +26,43 @@ def site_config Rails.application.config.sites end - def set_pinwheel(client_agency_id) - environment = site_config[client_agency_id].pinwheel_environment - @pinwheel ||= PinwheelService.new(environment) + class PinwheelAdapter + def initialize(environment) + @pinwheel = PinwheelService.new(environment) + end + + def query(query) + @pinwheel.fetch_items(q: query)["data"].map do |result| + PROVIDER_RESULT.new( + provider_name: :pinwheel, + provider_options: { + response_type: result["response_type"], + provider_id: result["id"] + }, + name: result["name"], + logo_url: result["logo_url"] + ) + end + end end - def set_argyle(client_agency_id) - environment = site_config[client_agency_id].argyle_environment - @argyle ||= ArgyleService.new(environment) + class ArgyleAdapter + def initialize(environment) + @argyle = ArgyleService.new(environment) + end + + def query(query) + @argyle.items(query)["results"].map do |result| + PROVIDER_RESULT.new( + provider_name: :argyle, + provider_options: { + response_type: result["kind"], + provider_id: result["id"] + }, + name: result["name"], + logo_url: result["logo_url"] + ) + end + end end end