Files
astuto/app/controllers/webhooks_controller.rb
Riccardo Graziosi a12a95eccc Add webhooks (#447)
2024-12-20 14:06:48 +01:00

97 lines
2.1 KiB
Ruby

class WebhooksController < ApplicationController
def index
authorize Webhook
@webhooks = Webhook.order(trigger: :asc, created_at: :desc)
render json: @webhooks
end
def create
@webhook = Webhook.new
@webhook.assign_attributes(webhook_params)
authorize @webhook
if @webhook.save
render json: @webhook, status: :created
else
render json: {
error: @webhook.errors.full_messages
}, status: :unprocessable_entity
end
end
def update
@webhook = Webhook.find(params[:id])
authorize @webhook
if @webhook.update(webhook_params)
render json: @webhook
else
render json: {
error: @webhook.errors.full_messages
}, status: :unprocessable_entity
end
end
def destroy
@webhook = Webhook.find(params[:id])
authorize @webhook
if @webhook.destroy
render json: {
id: params[:id]
}, status: :accepted
else
render json: {
error: @webhook.errors.full_messages
}, status: :unprocessable_entity
end
end
def preview
context = CreateLiquidTemplateContextWorkflow.new(
webhook_trigger: params[:webhook][:trigger],
is_test: true,
).run
url_template = Liquid::Template.parse(params[:webhook][:url])
url_preview = url_template.render(context)
http_body_template = Liquid::Template.parse(params[:webhook][:http_body])
http_body_preview = http_body_template.render(context)
render json: {
url_preview: url_preview,
http_body_preview: http_body_preview,
}, status: :ok
rescue => e
render json: {
error: e.message
}, status: :unprocessable_entity
end
def test
response = RunWebhook.perform_now(
webhook_id: params[:id],
current_tenant_id: Current.tenant.id,
is_test: true
)
render json: {
response: response,
}, status: :ok
rescue => e
render json: {
error: e.message
}, status: :unprocessable_entity
end
private
def webhook_params
params
.require(:webhook)
.permit(policy(@webhook).permitted_attributes)
end
end