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
34
35
36
37
38
39
40
41
42
|
# File 'app/jobs/solrengine/transactions/confirmation_job.rb', line 9
def perform(transfer_id, attempt: 0)
transfer = Solrengine::Transactions.transfer_model
.lock
.includes(:user)
.find_by(id: transfer_id)
return unless transfer&.signature
return if transfer.confirmed? || transfer.failed?
status_info = fetch_status(transfer.signature)
if status_info.nil?
if attempt < MAX_ATTEMPTS
self.class.set(wait: wait_for(attempt)).perform_later(transfer_id, attempt: attempt + 1)
else
transfer.update!(status: "failed", error_message: "Transaction not confirmed after #{MAX_ATTEMPTS} attempts")
broadcast_status(transfer)
end
return
end
if status_info["err"]
transfer.update!(status: "failed", error_message: status_info["err"].to_s.truncate(500))
else
confirmation = status_info["confirmationStatus"]
new_status = Transferable::VALID_STATUSES.include?(confirmation) ? confirmation : "confirmed"
transfer.update!(status: new_status)
if confirmation == "processed" || confirmation == "confirmed"
self.class.set(wait: wait_for(attempt)).perform_later(transfer_id, attempt: attempt + 1)
end
end
broadcast_status(transfer)
end
|