diff --git a/app/event_source/events/enroll/ridp_rba/determination_requested.rb b/app/event_source/events/enroll/ridp_rba/determination_requested.rb new file mode 100644 index 00000000000..1dcceed68ed --- /dev/null +++ b/app/event_source/events/enroll/ridp_rba/determination_requested.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Events + module Enroll + module RidpRba + # This class will register event for RIDP RBA determination request + class DeterminationRequested < EventSource::Event + publisher_path 'publishers.fdsh.ridp_rba_publisher' + end + end + end +end \ No newline at end of file diff --git a/app/event_source/events/enroll/ridp_rba/get_record_requested.rb b/app/event_source/events/enroll/ridp_rba/get_record_requested.rb new file mode 100644 index 00000000000..9b418023758 --- /dev/null +++ b/app/event_source/events/enroll/ridp_rba/get_record_requested.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Events + module Enroll + module RidpRba + # This class will register event for RIDP RBA get record request + class GetRecordRequested < EventSource::Event + publisher_path 'publishers.fdsh.ridp_rba_publisher' + end + end + end +end \ No newline at end of file diff --git a/app/event_source/publishers/fdsh/ridp_rba_publisher.rb b/app/event_source/publishers/fdsh/ridp_rba_publisher.rb new file mode 100644 index 00000000000..21aebb9ba37 --- /dev/null +++ b/app/event_source/publishers/fdsh/ridp_rba_publisher.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Publishers + module Fdsh + # Publisher will send RIDP RBA request payload to FDSH gateway + class RidpRbaPublisher + include ::EventSource::Publisher[amqp: 'enroll.ridp_rba'] + + register_event 'determination_requested' + register_event 'get_record_requested' + end + end +end \ No newline at end of file diff --git a/app/event_source/subscribers/fdsh_gateway/ridp_rba_determination_subscriber.rb b/app/event_source/subscribers/fdsh_gateway/ridp_rba_determination_subscriber.rb new file mode 100644 index 00000000000..7fa0be01fa9 --- /dev/null +++ b/app/event_source/subscribers/fdsh_gateway/ridp_rba_determination_subscriber.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +module Subscribers + module FdshGateway + # Subscriber will receive RIDP RBA determination response payload from FDSH gateway + class RidpRbaDeterminationSubscriber + include EventSource::Logging + include ::EventSource::Subscriber[amqp: 'fdsh.ridp_rba'] + + subscribe(:on_determined) do |delivery_info, metadata, response| + logger.info "FdshGateway::RidpRbaDeterminationSubscriber: invoked on_determined with delivery_info: #{delivery_info.inspect}, response: #{response.inspect}" + + job_id = metadata[:headers]['job_id'] + status = metadata[:headers]['status'] + + if status == 'failure' + handle_failure_response(job_id) + logger.info 'FdshGateway::RidpRbaDeterminationSubscriber: on_determined acked and processed failure from fdsh_gateway' + else + # TODO: Enroll operation that handles the CMS response coming back from FDSH + # payload = JSON.parse(response, symbolize_names: true) + # result = Operations::Fdsh::RidpRba::ProcessDeterminationResponse.new.call( + # { + # correlation_id: metadata.correlation_id, + # metadata: metadata, + # response: payload + # } + # ) + + if result.success? + logger.info "FdshGateway::RidpRbaDeterminationSubscriber: on_determined acked with success: #{result.success}" + else + logger.error "FdshGateway::RidpRbaDeterminationSubscriber: on_determined acked with failure, errors: #{result.failure}" + end + end + + ack(delivery_info.delivery_tag) + rescue StandardError => e + ack(delivery_info.delivery_tag) + logger.error "FdshGateway::RidpRbaDeterminationSubscriber: on_determined error_message: #{e.message}, backtrace: #{e.backtrace}" + end + + def handle_failure_response(job_id) + return unless job_id + + job = Transmittable::Job.where(job_id: job_id)&.last + return unless job + + message = 'Job failed in FDSH Gateway' + Operations::Transmittable::UpdateProcessStatus.new.call({ transmittable_objects: { job: job }, state: :failed, message: message }) + Operations::Transmittable::AddError.new.call({ transmittable_objects: { job: job }, key: :fdsh_gateway, message: message }) + end + end + end +end \ No newline at end of file