mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.3 KiB
38 lines
1.3 KiB
# frozen_string_literal: true
|
|
|
|
# Shared logic for determining if webhook requests should be retried
|
|
# Used across all Send*WebhookRequestJob classes
|
|
module WebhookRetryLogic
|
|
module_function
|
|
|
|
MAX_ATTEMPTS = 10
|
|
|
|
# Determines if a failed webhook request should be retried
|
|
#
|
|
# @param response [HTTP::Response, nil] The HTTP response from the webhook request
|
|
# @param attempt [Integer] Current retry attempt number
|
|
# @param record [Template, Submission, Submitter] The record triggering the webhook
|
|
# @return [Boolean] true if the webhook should be retried
|
|
def should_retry?(response:, attempt:, record:)
|
|
return false unless response.nil? || response.status.to_i >= 400
|
|
return false if attempt > MAX_ATTEMPTS
|
|
return true unless Docuseal.multitenant?
|
|
|
|
eligible_for_retries?(record)
|
|
end
|
|
|
|
# Checks if a record is eligible for webhook retries in multitenant mode
|
|
# @param record [Template, Submission, Submitter] The record to check
|
|
# @return [Boolean] true if eligible for retries
|
|
def eligible_for_retries?(record)
|
|
case record
|
|
when Template
|
|
record.partnership_id.present? || record.account&.account_configs&.exists?(key: :plan)
|
|
when Submission, Submitter
|
|
record.account.account_configs.exists?(key: :plan)
|
|
else
|
|
false
|
|
end
|
|
end
|
|
end
|