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
|