Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions app/event_source/events/enroll/ridp_rba/determination_requested.rb
Original file line number Diff line number Diff line change
@@ -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
12 changes: 12 additions & 0 deletions app/event_source/events/enroll/ridp_rba/get_record_requested.rb
Original file line number Diff line number Diff line change
@@ -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
13 changes: 13 additions & 0 deletions app/event_source/publishers/fdsh/ridp_rba_publisher.rb
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Loading