From 2e9eead20c665d5eeed387e2960485f366460851 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Sun, 2 Apr 2023 13:23:01 +0530 Subject: [PATCH] feat: update contacts filter query (#6802) - Update contacts API query to be faster --- .../api/v1/accounts/contacts_controller.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index b86b973df..8afd5b655 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -119,11 +119,12 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController end def fetch_contacts_with_conversation_count(contacts) - contacts_with_conversation_count = filtrate(contacts).left_outer_joins(:conversations) - .select('contacts.*, COUNT(conversations.id) as conversations_count') - .group('contacts.id') - .includes([{ avatar_attachment: [:blob] }]) - .page(@current_page).per(RESULTS_PER_PAGE) + conversation_count_sub_query = 'SELECT COUNT(*) FROM "conversations" WHERE "conversations"."contact_id" = "contacts"."id"' + contacts_with_conversation_count = filtrate(contacts) + .select("contacts.*, (#{conversation_count_sub_query}) as conversations_count") + .group('contacts.id') + .includes([{ avatar_attachment: [:blob] }]) + .page(@current_page).per(RESULTS_PER_PAGE) return contacts_with_conversation_count.includes([{ contact_inboxes: [:inbox] }]) if @include_contact_inboxes