diff --git a/enterprise/app/controllers/api/v1/accounts/applied_slas_controller.rb b/enterprise/app/controllers/api/v1/accounts/applied_slas_controller.rb index 1e862d8bb..d2eea3ad1 100644 --- a/enterprise/app/controllers/api/v1/accounts/applied_slas_controller.rb +++ b/enterprise/app/controllers/api/v1/accounts/applied_slas_controller.rb @@ -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]) diff --git a/enterprise/app/models/applied_sla.rb b/enterprise/app/models/applied_sla.rb index 5010d1a85..184716788 100644 --- a/enterprise/app/models/applied_sla.rb +++ b/enterprise/app/models/applied_sla.rb @@ -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 diff --git a/spec/enterprise/controllers/api/v1/accounts/applied_slas_controller_spec.rb b/spec/enterprise/controllers/api/v1/accounts/applied_slas_controller_spec.rb index 46cb48b03..c83bcdc82 100644 --- a/spec/enterprise/controllers/api/v1/accounts/applied_slas_controller_spec.rb +++ b/spec/enterprise/controllers/api/v1/accounts/applied_slas_controller_spec.rb @@ -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