perf: use account.contacts directly in search to reduce DB load (#12956)
- Use resolved contacts instead of accounts.contacts for search --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Pranav <pranavrajs@gmail.com>
This commit is contained in:
@@ -24,9 +24,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
|
|||||||
def search
|
def search
|
||||||
render json: { error: 'Specify search string with parameter q' }, status: :unprocessable_entity if params[:q].blank? && return
|
render json: { error: 'Specify search string with parameter q' }, status: :unprocessable_entity if params[:q].blank? && return
|
||||||
|
|
||||||
contacts = resolved_contacts.where(
|
contacts = Current.account.contacts.where(
|
||||||
'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search
|
'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search',
|
||||||
OR contacts.additional_attributes->>\'company_name\' ILIKE :search',
|
|
||||||
search: "%#{params[:q].strip}%"
|
search: "%#{params[:q].strip}%"
|
||||||
)
|
)
|
||||||
@contacts = fetch_contacts(contacts)
|
@contacts = fetch_contacts(contacts)
|
||||||
|
|||||||
@@ -357,18 +357,6 @@ RSpec.describe 'Contacts API', type: :request do
|
|||||||
expect(response.body).not_to include(contact1.email)
|
expect(response.body).not_to include(contact1.email)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'searches contacts using company name' do
|
|
||||||
contact2.update(additional_attributes: { company_name: 'acme.inc' })
|
|
||||||
get "/api/v1/accounts/#{account.id}/contacts/search",
|
|
||||||
params: { q: 'acme.inc' },
|
|
||||||
headers: admin.create_new_auth_token,
|
|
||||||
as: :json
|
|
||||||
|
|
||||||
expect(response).to have_http_status(:success)
|
|
||||||
expect(response.body).to include(contact2.email)
|
|
||||||
expect(response.body).not_to include(contact1.email)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'matches the resolved contact respecting the identifier character casing' do
|
it 'matches the resolved contact respecting the identifier character casing' do
|
||||||
contact_normal = create(:contact, name: 'testcontact', account: account, identifier: 'testidentifer')
|
contact_normal = create(:contact, name: 'testcontact', account: account, identifier: 'testidentifer')
|
||||||
contact_special = create(:contact, name: 'testcontact', account: account, identifier: 'TestIdentifier')
|
contact_special = create(:contact, name: 'testcontact', account: account, identifier: 'TestIdentifier')
|
||||||
|
|||||||
Reference in New Issue
Block a user