chore: add label filter

This commit is contained in:
Muhsin Keloth
2024-03-20 16:17:51 +05:30
parent e18ec3a58d
commit d13c742277
3 changed files with 21 additions and 5 deletions
@@ -7,8 +7,6 @@ class Api::V1::Accounts::AppliedSlasController < Api::V1::Accounts::EnterpriseAc
sort_on :created_at, type: :datetime
def index; end
def metrics
total_applied_slas = @sla_responses.count
missed_applied_slas = @sla_responses.where(sla_status: :missed).count
@@ -19,9 +17,10 @@ class Api::V1::Accounts::AppliedSlasController < Api::V1::Accounts::EnterpriseAc
private
def set_sla_responses
base_query = Current.account.applied_slas.includes([:conversation, :assigned_agent, :contact])
base_query = Current.account.applied_slas.left_joins(:conversation)
base_query = base_query.where(conversations: { cached_label_list: params[:label_list] }) if params[:label_list].present?
base_query = base_query.where(conversations: { assigned_agent_id: params[:user_ids] }) if params[:assigned_agent_id].present?
@sla_responses = filtrate(base_query).filter_by_created_at(range)
.filter_by_assigned_agent_id(params[:user_ids])
.filter_by_inbox_id(params[:inbox_id])
.filter_by_team_id(params[:team_id])
.filter_by_sla_policy_id(params[:sla_policy_id])
-1
View File
@@ -31,7 +31,6 @@ class AppliedSla < ApplicationRecord
scope :filter_by_created_at, ->(range) { where(created_at: range) if range.present? }
scope :filter_by_sla_policy_id, ->(sla_policy_id) { where(sla_policy_id: sla_policy_id) if sla_policy_id.present? }
scope :filter_by_assigned_agent_id, ->(user_ids) { joins(:conversation).where(conversations: { assigned_agent_id: user_ids }) if user_ids.present? }
scope :filter_by_inbox_id, ->(inbox_id) { joins(:conversation).where(conversations: { inbox_id: inbox_id }) if inbox_id.present? }
scope :filter_by_team_id, ->(team_id) { joins(:conversation).where(conversations: { team_id: team_id }) if team_id.present? }
private
@@ -77,6 +77,24 @@ RSpec.describe 'Applied SLAs API', type: :request do
expect(body).to include('hit_percentage' => 50.0)
expect(body).to include('number_of_breaches' => 1)
end
it 'filters sla metrics based on labels' do
AppliedSla.destroy_all
conversation2.update_labels('label1')
conversation3.update_labels('label1')
create(:applied_sla, sla_policy: sla_policy1, conversation: conversation1, created_at: 10.days.ago)
create(:applied_sla, sla_policy: sla_policy1, conversation: conversation2, created_at: 3.days.ago, sla_status: 'missed')
create(:applied_sla, sla_policy: sla_policy1, conversation: conversation3, created_at: 3.days.ago)
get "/api/v1/accounts/#{account.id}/applied_slas/metrics",
params: { label_list: ['label1'] },
headers: administrator.create_new_auth_token
expect(response).to have_http_status(:success)
body = JSON.parse(response.body)
expect(body).to include('hit_percentage' => 50.0)
expect(body).to include('number_of_breaches' => 1)
end
end
end
end