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:
Tanmay Deep Sharma
2025-08-27 09:12:58 +07:00
committed by GitHub
parent 39dfa35229
commit ad90deb709
26 changed files with 679 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: @agent_capacity_policy

View File

@@ -0,0 +1,6 @@
json.id @inbox_limit.id
json.inbox_id @inbox_limit.inbox_id
json.agent_capacity_policy_id @inbox_limit.agent_capacity_policy_id
json.conversation_limit @inbox_limit.conversation_limit
json.created_at @inbox_limit.created_at.to_i
json.updated_at @inbox_limit.updated_at.to_i

View File

@@ -0,0 +1,7 @@
json.id @inbox_limit.id
json.inbox_id @inbox_limit.inbox_id
json.inbox_name @inbox_limit.inbox.name
json.agent_capacity_policy_id @agent_capacity_policy.id
json.conversation_limit @inbox_limit.conversation_limit
json.created_at @inbox_limit.created_at.to_i
json.updated_at @inbox_limit.updated_at.to_i

View File

@@ -0,0 +1,4 @@
json.array! @agent_capacity_policies do |policy|
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: policy
end

View File

@@ -0,0 +1,2 @@
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: @agent_capacity_policy

View File

@@ -0,0 +1,2 @@
json.partial! 'api/v1/models/agent_capacity_policy', formats: [:json],
agent_capacity_policy: @agent_capacity_policy

View File

@@ -0,0 +1 @@
json.partial! 'api/v1/models/user', resource: @user

View File

@@ -0,0 +1,3 @@
json.array! @users do |user|
json.partial! 'api/v1/models/user', resource: user
end

View File

@@ -0,0 +1,13 @@
json.id agent_capacity_policy.id
json.name agent_capacity_policy.name
json.description agent_capacity_policy.description
json.exclusion_rules agent_capacity_policy.exclusion_rules
json.created_at agent_capacity_policy.created_at.to_i
json.updated_at agent_capacity_policy.updated_at.to_i
json.account_id agent_capacity_policy.account_id
json.inbox_capacity_limits agent_capacity_policy.inbox_capacity_limits do |limit|
json.id limit.id
json.inbox_id limit.inbox_id
json.conversation_limit limit.conversation_limit
end