diff --git a/app/controllers/resources_controller.rb b/app/controllers/resources_controller.rb index e18e5510..818375f5 100644 --- a/app/controllers/resources_controller.rb +++ b/app/controllers/resources_controller.rb @@ -44,14 +44,11 @@ def certify end def destroy - resource = Resource.find params[:id] - if resource.approved? - resource.inactive! - remove_from_algolia(resource) - render status: :ok - else - render status: :precondition_failed - end + puts params[:id] + Services::Resources.deactivate params[:id] + render status: :ok + rescue Errors::PreconditionFailed + render status: :precondition_failed end # Return the total number of active (i.e., approved) resources diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb index ead61828..8c497561 100644 --- a/app/controllers/services_controller.rb +++ b/app/controllers/services_controller.rb @@ -87,14 +87,10 @@ def reject end def destroy - service = Service.find params[:id] - if service.approved? - service.inactive! - remove_from_algolia(service) - render status: :ok - else - render status: :precondition_failed - end + Services::Services.deactivate params[:id] + render status: :ok + rescue Errors::PreconditionFailed + render status: :precondition_failed end def count @@ -103,12 +99,6 @@ def count private - def remove_from_algolia(service) - service.remove_from_index! - rescue StandardError - puts 'failed to remove rservice ' + service.id.to_s + ' from algolia index' - end - def services Service.includes(:notes, :categories, :eligibilities, :addresses, schedule: :schedule_days) end diff --git a/app/errors/errors.rb b/app/errors/errors.rb new file mode 100644 index 00000000..026e1f1c --- /dev/null +++ b/app/errors/errors.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module Errors + class PreconditionFailed < StandardError; end +end diff --git a/app/services/resources/resources.rb b/app/services/resources/resources.rb new file mode 100644 index 00000000..904d8a90 --- /dev/null +++ b/app/services/resources/resources.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Services + module Resources + include Errors + + def self.deactivate(id) + resource = Resource.find id + raise Errors::PreconditionFailed unless resource.approved? + + resource.inactive! + remove_from_algolia(resource) + resource.services.each do |service| + Services.deactivate service + end + end + + def self.remove_from_algolia(resource) + resource.remove_from_index! + rescue StandardError + puts 'failed to remove resource ' + resource.id.to_s + ' from algolia index' + end + end +end diff --git a/app/services/services/services.rb b/app/services/services/services.rb new file mode 100644 index 00000000..a49d6409 --- /dev/null +++ b/app/services/services/services.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Services + module Services + include Errors + + def self.deactivate(id) + service = Service.find id + raise Errors::PreconditionFailed unless service.approved? + + service.inactive! + remove_from_algolia(service) + end + + def self.remove_from_algolia(service) + service.remove_from_index! + rescue StandardError + puts 'failed to remove service ' + service.id.to_s + ' from algolia index' + end + end +end