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.
67 lines
2.4 KiB
67 lines
2.4 KiB
# frozen_string_literal: true
|
|
|
|
class WebhookEventsController < ApplicationController
|
|
load_and_authorize_resource :webhook_url, parent: false, id_param: :webhook_id
|
|
before_action :load_webhook_event
|
|
|
|
def show
|
|
return unless current_ability.can?(:read, @webhook_event.record)
|
|
|
|
@data =
|
|
case @webhook_event.event_type
|
|
when 'form.started', 'form.completed', 'form.declined', 'form.viewed'
|
|
Submitters::SerializeForWebhook.call(@webhook_event.record)
|
|
when 'submission.created', 'submission.completed', 'submission.expired'
|
|
Submissions::SerializeForApi.call(@webhook_event.record)
|
|
when 'template.created', 'template.updated'
|
|
Templates::SerializeForApi.call(@webhook_event.record)
|
|
when 'submission.archived'
|
|
@webhook_event.record.as_json(only: %i[id archived_at])
|
|
end
|
|
end
|
|
|
|
def resend
|
|
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,
|
|
'event_uuid' => @webhook_event.uuid,
|
|
'attempt' => SendWebhookRequest::MANUAL_ATTEMPT,
|
|
'last_status' => 0
|
|
)
|
|
|
|
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
|