مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-12-01 05:43:04 +00:00
50 أسطر
1.2 KiB
Ruby
50 أسطر
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Worker
|
|
module Jobs
|
|
class ProcessWebhookRequestsJob < BaseJob
|
|
|
|
def call
|
|
@lock_time = Time.current
|
|
@locker = Postal.locker_name_with_suffix(SecureRandom.hex(8))
|
|
|
|
lock_request_for_processing
|
|
obtain_locked_requests
|
|
process_requests
|
|
end
|
|
|
|
private
|
|
|
|
# Obtain a webhook request from the database for processing
|
|
#
|
|
# @return [void]
|
|
def lock_request_for_processing
|
|
WebhookRequest.unlocked
|
|
.ready
|
|
.limit(1)
|
|
.update_all(locked_by: @locker, locked_at: @lock_time)
|
|
end
|
|
|
|
# Get a full list of all webhooks which we can process (i.e. those which have just
|
|
# been locked by us for processing)
|
|
#
|
|
# @return [void]
|
|
def obtain_locked_requests
|
|
@requests_to_process = WebhookRequest.where(locked_by: @locker, locked_at: @lock_time)
|
|
end
|
|
|
|
# Process the webhook requests we obtained from the database
|
|
#
|
|
# @return [void]
|
|
def process_requests
|
|
@requests_to_process.each do |request|
|
|
work_completed!
|
|
|
|
WebhookDeliveryService.new(webhook_request: request).call
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|