Chatwoot/app/controllers/api/v1/accounts/automation_rules_controller.rb

88 lines
2.5 KiB
Ruby
Raw Normal View History

2022-01-10 07:11:59 +00:00
class Api::V1::Accounts::AutomationRulesController < Api::V1::Accounts::BaseController
before_action :check_authorization
before_action :fetch_automation_rule, only: [:show, :update, :destroy, :clone]
2022-01-10 07:11:59 +00:00
def index
2022-03-01 08:44:23 +00:00
@automation_rules = Current.account.automation_rules
2022-01-10 07:11:59 +00:00
end
def create
2022-03-30 02:38:58 +00:00
@automation_rule = Current.account.automation_rules.new(automation_rules_permit)
@automation_rule.actions = params[:actions]
@automation_rule.conditions = params[:conditions]
2022-03-30 02:38:58 +00:00
render json: { error: @automation_rule.errors.messages }, status: :unprocessable_entity and return unless @automation_rule.valid?
@automation_rule.save!
process_attachments
@automation_rule
2022-01-10 07:11:59 +00:00
end
def attach_file
file_blob = ActiveStorage::Blob.create_and_upload!(
key: nil,
io: params[:attachment].tempfile,
filename: params[:attachment].original_filename,
content_type: params[:attachment].content_type
)
render json: { blob_key: file_blob.key, blob_id: file_blob.id }
end
def show; end
def update
ActiveRecord::Base.transaction do
automation_rule_update
process_attachments
rescue StandardError => e
Rails.logger.error e
render json: { error: @automation_rule.errors.messages }.to_json, status: :unprocessable_entity
end
end
def destroy
@automation_rule.destroy!
head :ok
end
def clone
automation_rule = Current.account.automation_rules.find_by(id: params[:automation_rule_id])
new_rule = automation_rule.dup
new_rule.save!
@automation_rule = new_rule
end
2022-03-30 02:38:58 +00:00
def process_attachments
actions = @automation_rule.actions.filter_map { |k, _v| k if k['action_name'] == 'send_attachment' }
return if actions.blank?
2022-03-30 02:38:58 +00:00
actions.each do |action|
blob_id = action['action_params']
blob = ActiveStorage::Blob.find_by(id: blob_id)
@automation_rule.files.attach(blob)
2022-03-30 02:38:58 +00:00
end
end
private
def automation_rule_update
@automation_rule.update!(automation_rules_permit)
@automation_rule.actions = params[:actions] if params[:actions]
@automation_rule.conditions = params[:conditions] if params[:conditions]
@automation_rule.save!
end
2022-01-10 07:11:59 +00:00
def automation_rules_permit
params.permit(
2022-03-01 08:44:23 +00:00
:name, :description, :event_name, :account_id, :active,
conditions: [:attribute_key, :filter_operator, :query_operator, :custom_attribute_type, { values: [] }],
2022-03-29 07:57:16 +00:00
actions: [:action_name, { action_params: [] }]
2022-01-10 07:11:59 +00:00
)
end
def fetch_automation_rule
@automation_rule = Current.account.automation_rules.find_by(id: params[:id])
end
2022-01-10 07:11:59 +00:00
end