feat: Add agent capacity controllers (#12200)
## Linear reference: https://linear.app/chatwoot/issue/CW-4649/re-imagine-assignments ## Description This PR introduces the foundation for Assignment V2 system by implementing agent_capacity and their association with inboxes and users. ## Type of change - [ ] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? Test Coverage: - Controller specs for assignment policies CRUD operations - Enterprise-specific specs for balanced assignment order - Model specs for community/enterprise separation ## Checklist: - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Pranav <pranav@chatwoot.com>
This commit is contained in:
committed by
GitHub
parent
39dfa35229
commit
ad90deb709
27
enterprise/app/models/agent_capacity_policy.rb
Normal file
27
enterprise/app/models/agent_capacity_policy.rb
Normal file
@@ -0,0 +1,27 @@
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: agent_capacity_policies
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# description :text
|
||||
# exclusion_rules :jsonb not null
|
||||
# name :string(255) not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# account_id :bigint not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_agent_capacity_policies_on_account_id (account_id)
|
||||
#
|
||||
class AgentCapacityPolicy < ApplicationRecord
|
||||
MAX_NAME_LENGTH = 255
|
||||
|
||||
belongs_to :account
|
||||
has_many :inbox_capacity_limits, dependent: :destroy
|
||||
has_many :inboxes, through: :inbox_capacity_limits
|
||||
has_many :account_users, dependent: :nullify
|
||||
|
||||
validates :name, presence: true, length: { maximum: MAX_NAME_LENGTH }
|
||||
validates :account, presence: true
|
||||
end
|
||||
@@ -5,6 +5,7 @@ module Enterprise::Concerns::Account
|
||||
has_many :sla_policies, dependent: :destroy_async
|
||||
has_many :applied_slas, dependent: :destroy_async
|
||||
has_many :custom_roles, dependent: :destroy_async
|
||||
has_many :agent_capacity_policies, dependent: :destroy_async
|
||||
|
||||
has_many :captain_assistants, dependent: :destroy_async, class_name: 'Captain::Assistant'
|
||||
has_many :captain_assistant_responses, dependent: :destroy_async, class_name: 'Captain::AssistantResponse'
|
||||
|
||||
@@ -3,5 +3,6 @@ module Enterprise::Concerns::AccountUser
|
||||
|
||||
included do
|
||||
belongs_to :custom_role, optional: true
|
||||
belongs_to :agent_capacity_policy, optional: true
|
||||
end
|
||||
end
|
||||
|
||||
24
enterprise/app/models/inbox_capacity_limit.rb
Normal file
24
enterprise/app/models/inbox_capacity_limit.rb
Normal file
@@ -0,0 +1,24 @@
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: inbox_capacity_limits
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# conversation_limit :integer not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# agent_capacity_policy_id :bigint not null
|
||||
# inbox_id :bigint not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# idx_on_agent_capacity_policy_id_inbox_id_71c7ec4caf (agent_capacity_policy_id,inbox_id) UNIQUE
|
||||
# index_inbox_capacity_limits_on_agent_capacity_policy_id (agent_capacity_policy_id)
|
||||
# index_inbox_capacity_limits_on_inbox_id (inbox_id)
|
||||
#
|
||||
class InboxCapacityLimit < ApplicationRecord
|
||||
belongs_to :agent_capacity_policy
|
||||
belongs_to :inbox
|
||||
|
||||
validates :conversation_limit, presence: true, numericality: { greater_than: 0, only_integer: true }
|
||||
validates :inbox_id, uniqueness: { scope: :agent_capacity_policy_id }
|
||||
end
|
||||
Reference in New Issue
Block a user