refresh webhook status

This commit is contained in:
Pete Matsyburka
2025-07-05 10:27:35 +03:00
parent 988a5361a6
commit 4615e3e48f
10 changed files with 139 additions and 90 deletions
+33 -7
View File
@@ -1,12 +1,10 @@
# frozen_string_literal: true
class WebhookEventsController < ApplicationController
load_and_authorize_resource :webhook_url, parent: false, only: %i[show resend], id_param: :webhook_id
load_and_authorize_resource :webhook_url, parent: false, id_param: :webhook_id
before_action :load_webhook_event
def show
@webhook_event = @webhook_url.webhook_events.find_by!(uuid: params[:id])
@webhook_attempts = @webhook_event.webhook_attempts.order(created_at: :desc)
return unless current_ability.can?(:read, @webhook_event.record)
@data =
@@ -23,10 +21,10 @@ class WebhookEventsController < ApplicationController
end
def resend
@webhook_event = @webhook_url.webhook_events.find_by!(uuid: params[:id])
id_key = WebhookUrls::EVENT_TYPE_ID_KEYS.fetch(@webhook_event.event_type.split('.').first)
last_attempt_id = @webhook_event.webhook_attempts.maximum(:id)
WebhookUrls::EVENT_TYPE_TO_JOB_CLASS[@webhook_event.event_type].perform_async(
id_key => @webhook_event.record_id,
'webhook_url_id' => @webhook_event.webhook_url_id,
@@ -35,6 +33,34 @@ class WebhookEventsController < ApplicationController
'last_status' => 0
)
head :ok
render turbo_stream: [
turbo_stream.after(
params[:button_id],
helpers.tag.submit_form(
helpers.button_to('', refresh_settings_webhook_event_path(@webhook_url.id, @webhook_event.uuid),
params: { last_attempt_id: }),
class: 'hidden', data: { interval: 3_000 }
)
)
]
end
def refresh
return head :ok if @webhook_event.webhook_attempts.maximum(:id) == params[:last_attempt_id].to_i
render turbo_stream: [
turbo_stream.replace(helpers.dom_id(@webhook_event),
partial: 'event_row',
locals: { with_status: true, webhook_url: @webhook_url, webhook_event: @webhook_event }),
turbo_stream.replace("drawer_events_#{helpers.dom_id(@webhook_event)}",
partial: 'drawer_events',
locals: { webhook_url: @webhook_url, webhook_event: @webhook_event })
]
end
private
def load_webhook_event
@webhook_event = @webhook_url.webhook_events.find_by!(uuid: params[:id])
end
end