d5215fea93
- Introduces JSON Schema validations via JSONSchemer - Add CRUD APIs for integration hooks
59 lines
1.6 KiB
Ruby
59 lines
1.6 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: integrations_hooks
|
|
#
|
|
# id :bigint not null, primary key
|
|
# access_token :string
|
|
# hook_type :integer default("account")
|
|
# settings :jsonb
|
|
# status :integer default("disabled")
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# account_id :integer
|
|
# app_id :string
|
|
# inbox_id :integer
|
|
# reference_id :string
|
|
#
|
|
class Integrations::Hook < ApplicationRecord
|
|
include Reauthorizable
|
|
|
|
attr_readonly :app_id, :account_id, :inbox_id, :hook_type
|
|
before_validation :ensure_hook_type
|
|
validates :account_id, presence: true
|
|
validates :app_id, presence: true
|
|
validates :inbox_id, presence: true, if: -> { hook_type == 'inbox' }
|
|
validate :validate_settings_json_schema
|
|
validates :app_id, uniqueness: { scope: [:account_id], unless: -> { app.present? && app.params[:allow_multiple_hooks].present? } }
|
|
|
|
enum status: { disabled: 0, enabled: 1 }
|
|
|
|
belongs_to :account
|
|
belongs_to :inbox, optional: true
|
|
has_secure_token :access_token
|
|
|
|
enum hook_type: { account: 0, inbox: 1 }
|
|
|
|
def app
|
|
@app ||= Integrations::App.find(id: app_id)
|
|
end
|
|
|
|
def slack?
|
|
app_id == 'slack'
|
|
end
|
|
|
|
def disable
|
|
update(status: 'disabled')
|
|
end
|
|
|
|
private
|
|
|
|
def ensure_hook_type
|
|
self.hook_type = app.params[:hook_type] if app.present?
|
|
end
|
|
|
|
def validate_settings_json_schema
|
|
return if app.blank? || app.params[:settings_json_schema].blank?
|
|
|
|
errors.add(:settings, ': Invalid settings data') unless JSONSchemer.schema(app.params[:settings_json_schema]).valid?(settings)
|
|
end
|
|
end
|