chore: add label filter
This commit is contained in:
@@ -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])
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user