diff --git a/app/models/conversation.rb b/app/models/conversation.rb index 8bc23a174131..7a3bfcd6865d 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -24,6 +24,7 @@ # contact_inbox_id :bigint # display_id :integer not null # inbox_id :integer not null +# sla_policy_id :bigint # team_id :bigint # # Indexes @@ -294,3 +295,5 @@ def validate_referer_url "NEW.display_id := nextval('conv_dpid_seq_' || NEW.account_id);" end end + +Conversation.include_mod_with('EnterpriseConversationConcern') diff --git a/db/migrate/20230620132319_add_sla_policy_to_conversations.rb b/db/migrate/20230620132319_add_sla_policy_to_conversations.rb new file mode 100644 index 000000000000..f698174af62d --- /dev/null +++ b/db/migrate/20230620132319_add_sla_policy_to_conversations.rb @@ -0,0 +1,5 @@ +class AddSlaPolicyToConversations < ActiveRecord::Migration[7.0] + def change + add_column :conversations, :sla_policy_id, :bigint + end +end diff --git a/db/schema.rb b/db/schema.rb index 91a2501ba886..8947aed66514 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_06_12_103936) do +ActiveRecord::Schema[7.0].define(version: 2023_06_20_132319) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "pg_trgm" @@ -448,6 +448,7 @@ t.datetime "assignee_last_seen_at", precision: nil t.datetime "first_reply_created_at", precision: nil t.integer "priority" + t.bigint "sla_policy_id" t.index ["account_id", "display_id"], name: "index_conversations_on_account_id_and_display_id", unique: true t.index ["account_id", "id"], name: "index_conversations_on_id_and_account_id" t.index ["account_id", "inbox_id", "status", "assignee_id"], name: "conv_acid_inbid_stat_asgnid_idx" diff --git a/enterprise/app/models/enterprise/enterprise_conversation_concern.rb b/enterprise/app/models/enterprise/enterprise_conversation_concern.rb new file mode 100644 index 000000000000..fc39a61a9f94 --- /dev/null +++ b/enterprise/app/models/enterprise/enterprise_conversation_concern.rb @@ -0,0 +1,7 @@ +module Enterprise::EnterpriseConversationConcern + extend ActiveSupport::Concern + + included do + belongs_to :sla_policy, optional: true + end +end diff --git a/enterprise/app/models/sla_policy.rb b/enterprise/app/models/sla_policy.rb index 042cc2444d84..14ea1c34acee 100644 --- a/enterprise/app/models/sla_policy.rb +++ b/enterprise/app/models/sla_policy.rb @@ -18,4 +18,6 @@ class SlaPolicy < ApplicationRecord belongs_to :account validates :name, presence: true + + has_many :conversations, dependent: :nullify end diff --git a/spec/enterprise/models/conversation_spec.rb b/spec/enterprise/models/conversation_spec.rb new file mode 100644 index 000000000000..14f9e060a09f --- /dev/null +++ b/spec/enterprise/models/conversation_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +RSpec.describe Conversation, type: :model do + describe 'associations' do + it { is_expected.to belong_to(:sla_policy).optional } + end +end diff --git a/spec/enterprise/models/sla_policy_spec.rb b/spec/enterprise/models/sla_policy_spec.rb index 6be1f4e4577f..6fa8044cd027 100644 --- a/spec/enterprise/models/sla_policy_spec.rb +++ b/spec/enterprise/models/sla_policy_spec.rb @@ -11,6 +11,7 @@ describe 'associations' do it { is_expected.to belong_to(:account) } + it { is_expected.to have_many(:conversations).dependent(:nullify) } end describe 'validates_factory' do diff --git a/spec/models/conversation_spec.rb b/spec/models/conversation_spec.rb index 3bbe3c833778..d5e5525a6345 100644 --- a/spec/models/conversation_spec.rb +++ b/spec/models/conversation_spec.rb @@ -8,6 +8,11 @@ describe 'associations' do it { is_expected.to belong_to(:account) } it { is_expected.to belong_to(:inbox) } + it { is_expected.to belong_to(:contact) } + it { is_expected.to belong_to(:contact_inbox) } + it { is_expected.to belong_to(:assignee).optional } + it { is_expected.to belong_to(:team).optional } + it { is_expected.to belong_to(:campaign).optional } end describe 'concerns' do