Class: CommandTower::Messaging::Contract::Mappers::ChannelDeliveryMapper

Inherits:
Object
  • Object
show all
Defined in:
app/services/command_tower/messaging/contract/mappers/channel_delivery_mapper.rb

Class Method Summary collapse

Class Method Details

.to_result(delivery) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/services/command_tower/messaging/contract/mappers/channel_delivery_mapper.rb', line 8

def self.to_result(delivery)
  return nil if delivery.nil?

  ordered_attempts = delivery.delivery_attempts.sort_by do |attempt|
    [attempt.started_at, attempt.id]
  end
  latest_attempt = ordered_attempts.last

  Results::ChannelDeliveryResult.new(
    id: delivery.id,
    channel_key: delivery.channel_key,
    status: delivery.status,
    execution_attempt_count: delivery.execution_attempt_count,
    execution_claimed_at: delivery.execution_claimed_at,
    updated_at: delivery.updated_at,
    terminal: delivery.execution_terminal?,
    retries_exhausted: Messaging::DeliveryRetryPolicy.retries_exhausted?(delivery),
    retry_expected: Messaging::DeliveryRetryPolicy.retry_expected?(delivery),
    retry_eligible_at: Messaging::DeliveryRetryPolicy.retry_eligible_at(delivery),
    latest_outcome_code: latest_outcome_code(latest_attempt),
    latest_attempt_at: latest_attempt_at(latest_attempt),
    delivery_attempts: ordered_attempts.each_with_index.map do |attempt, index|
      DeliveryAttemptMapper.to_result(attempt, attempt_number: index + 1)
    end.freeze,
  ).freeze
end