diff --git a/Gemfile b/Gemfile index 2997ad9ab2..5702baa55f 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,7 @@ ruby File.read(".ruby-version").chomp gem "activerecord-session_store" gem "bootsnap", ">= 1.1.0", require: false gem "canonical-rails" +gem "daemons" gem "delayed_job", "~> 4.1" gem "delayed_job_active_record" gem "devise", "~> 4.9" @@ -37,6 +38,7 @@ gem "sentry-rails" gem "sentry-ruby" gem "stimulus-rails" gem "webpacker" +gem "whenever" gem "net-imap", require: false gem "net-pop", require: false diff --git a/Gemfile.lock b/Gemfile.lock index 507bca08a9..dccc4c84dc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -105,6 +105,7 @@ GEM capybara (>= 1.0, < 4) launchy childprocess (4.1.0) + chronic (0.10.2) coderay (1.1.3) coercible (1.0.0) descendants_tracker (~> 0.0.1) @@ -112,6 +113,7 @@ GEM crack (0.4.5) rexml crass (1.0.6) + daemons (1.4.1) date (3.3.3) deep_merge (1.2.1) delayed_job (4.1.11) @@ -500,6 +502,8 @@ GEM websocket-driver (0.7.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) + whenever (1.0.0) + chronic (>= 0.6.3) with_model (2.1.6) activerecord (>= 5.2) xpath (3.2.0) @@ -521,6 +525,7 @@ DEPENDENCIES canonical-rails capybara capybara-screenshot + daemons delayed_job (~> 4.1) delayed_job_active_record devise (~> 4.9) @@ -573,6 +578,7 @@ DEPENDENCIES webdrivers webmock webpacker + whenever with_model RUBY VERSION diff --git a/app/jobs/receive_lead_provider_approval_status_from_ecf.rb b/app/jobs/receive_lead_provider_approval_status_from_ecf.rb new file mode 100644 index 0000000000..7233508854 --- /dev/null +++ b/app/jobs/receive_lead_provider_approval_status_from_ecf.rb @@ -0,0 +1,28 @@ +class ReceiveLeadProviderApprovalStatusFromEcf < ApplicationJob + queue_as :default + def perform + begin + uri = URI.parse("#{ENV['ECF_APP_BASE_URL']}/api/v3/npq-applications/send_lead_provider_approval_status_to_npq") + request = Net::HTTP::Get.new(uri) + request["Authorization"] = "Bearer #{ENV['ECF_APP_BEARER_TOKEN']}" + response = Net::HTTP.start(uri.hostname, uri.port) do |http| + http.request(request) + end + if response.is_a?(Net::HTTPSuccess) + response_data = JSON.parse(response.body) + filtered_applications = Application.where.not(ecf_id: nil) + response_data["data"].map do |status_data| + retrieved_id = status_data["attributes"]["id"] + retrieved_status = status_data["attributes"]["lead_provider_approval_status"] + application = filtered_applications.find_by(ecf_id: retrieved_id) + application.update!(lead_provider_approval_status: retrieved_status) if application.present? + end + else + response_message = response.message + raise "Failed to retrieve lead provider approval status: #{response_message}" + end + rescue StandardError => e + Rails.logger.error "An error occurred during lead provider approval status retrieval: #{e.message}" + end + end +end diff --git a/app/models/application.rb b/app/models/application.rb index e51d5bece1..460ccf03cd 100644 --- a/app/models/application.rb +++ b/app/models/application.rb @@ -37,6 +37,7 @@ def new_headteacher? def school School.find_by(urn: school_urn) end +<<<<<<< HEAD def receive_lead_provider_approval_status_from_ecf uri = URI.parse("#{ENV['ECF_APP_BASE_URL']}/api/v3/npq-applications/send_lead_provider_approval_status_to_npq") @@ -61,4 +62,6 @@ def receive_lead_provider_approval_status_from_ecf rescue StandardError => e Rails.logger.error "An error occurred during lead provider approval status retrieval: #{e.message}" end +======= +>>>>>>> 35f455f8 (Created scheduled background job) end diff --git a/config/schedule.rb b/config/schedule.rb new file mode 100644 index 0000000000..f8f09b4215 --- /dev/null +++ b/config/schedule.rb @@ -0,0 +1,3 @@ +every :day, at: "12pm" do + runner "ReceiveLeadProviderApprovalStatusFromEcf.perform_now" +end