mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 11:08:04 +00:00 
			
		
		
		
	 59b31615ed
			
		
	
	59b31615ed
	
	
	
		
			
			* Use "create!" when not checking for errors on the result * Use "save!" when not checking the result
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Api::V1::Accounts::AutomationRulesController < Api::V1::Accounts::BaseController
 | |
|   before_action :check_authorization
 | |
|   before_action :fetch_automation_rule, only: [:show, :update, :destroy, :clone]
 | |
| 
 | |
|   def index
 | |
|     @automation_rules = Current.account.automation_rules
 | |
|   end
 | |
| 
 | |
|   def create
 | |
|     @automation_rule = Current.account.automation_rules.new(automation_rules_permit)
 | |
|     @automation_rule.actions = params[:actions]
 | |
|     @automation_rule.conditions = params[:conditions]
 | |
| 
 | |
|     render json: { error: @automation_rule.errors.messages }, status: :unprocessable_entity and return unless @automation_rule.valid?
 | |
| 
 | |
|     @automation_rule.save!
 | |
|     process_attachments
 | |
|     @automation_rule
 | |
|   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
 | |
| 
 | |
|   def process_attachments
 | |
|     actions = @automation_rule.actions.filter_map { |k, _v| k if k['action_name'] == 'send_attachment' }
 | |
|     return if actions.blank?
 | |
| 
 | |
|     actions.each do |action|
 | |
|       blob_id = action['action_params']
 | |
|       blob = ActiveStorage::Blob.find_by(id: blob_id)
 | |
|       @automation_rule.files.attach(blob)
 | |
|     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
 | |
| 
 | |
|   def automation_rules_permit
 | |
|     params.permit(
 | |
|       :name, :description, :event_name, :account_id, :active,
 | |
|       conditions: [:attribute_key, :filter_operator, :query_operator, :custom_attribute_type, { values: [] }],
 | |
|       actions: [:action_name, { action_params: [] }]
 | |
|     )
 | |
|   end
 | |
| 
 | |
|   def fetch_automation_rule
 | |
|     @automation_rule = Current.account.automation_rules.find_by(id: params[:id])
 | |
|   end
 | |
| end
 |