From 0f12b2a3f314a5c90f89cfae2878c8d6f0092f35 Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Fri, 21 Mar 2025 23:54:43 +0530 Subject: [PATCH] feat: allow searching conversations by contact email address --- frontend/src/views/search/SearchView.vue | 2 +- internal/search/queries.sql | 14 +++++++++++++- internal/search/search.go | 21 ++++++++++++++------- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/frontend/src/views/search/SearchView.vue b/frontend/src/views/search/SearchView.vue index b267038..8500cd7 100644 --- a/frontend/src/views/search/SearchView.vue +++ b/frontend/src/views/search/SearchView.vue @@ -28,7 +28,7 @@

Search conversations

- Search by reference number, messages, or any keywords related to your conversations. + Search by reference number, contact email address or messages in conversations.

diff --git a/internal/search/queries.sql b/internal/search/queries.sql index e16f63c..672fd28 100644 --- a/internal/search/queries.sql +++ b/internal/search/queries.sql @@ -1,4 +1,4 @@ --- name: search-conversations +-- name: search-conversations-by-reference-number SELECT conversations.created_at, conversations.uuid, @@ -7,6 +7,18 @@ SELECT FROM conversations WHERE reference_number::text = $1; +-- name: search-conversations-by-contact-email +SELECT + conversations.created_at, + conversations.uuid, + conversations.reference_number, + conversations.subject +FROM conversations +JOIN users ON conversations.contact_id = users.id +WHERE users.email = $1 +ORDER BY conversations.created_at DESC +LIMIT 1000; + -- name: search-messages SELECT c.created_at as "conversation_created_at", diff --git a/internal/search/search.go b/internal/search/search.go index 7c3eb3f..ddf66e7 100644 --- a/internal/search/search.go +++ b/internal/search/search.go @@ -30,9 +30,10 @@ type Opts struct { // queries contains all the prepared queries type queries struct { - SearchConversations *sqlx.Stmt `query:"search-conversations"` - SearchMessages *sqlx.Stmt `query:"search-messages"` - SearchContacts *sqlx.Stmt `query:"search-contacts"` + SearchConversationsByRefNum *sqlx.Stmt `query:"search-conversations-by-reference-number"` + SearchConversationsByContactEmail *sqlx.Stmt `query:"search-conversations-by-contact-email"` + SearchMessages *sqlx.Stmt `query:"search-messages"` + SearchContacts *sqlx.Stmt `query:"search-contacts"` } // New creates a new search manager @@ -46,12 +47,18 @@ func New(opts Opts) (*Manager, error) { // Conversations searches conversations based on the query func (s *Manager) Conversations(query string) ([]models.Conversation, error) { - var results = make([]models.Conversation, 0) - if err := s.q.SearchConversations.Select(&results, query); err != nil { + var refNumResults = make([]models.Conversation, 0) + if err := s.q.SearchConversationsByRefNum.Select(&refNumResults, query); err != nil { s.lo.Error("error searching conversations", "error", err) return nil, envelope.NewError(envelope.GeneralError, "Error searching conversations", nil) } - return results, nil + + var emailResults = make([]models.Conversation, 0) + if err := s.q.SearchConversationsByContactEmail.Select(&emailResults, query); err != nil { + s.lo.Error("error searching conversations", "error", err) + return nil, envelope.NewError(envelope.GeneralError, "Error searching conversations", nil) + } + return append(refNumResults, emailResults...), nil } // Messages searches messages based on the query @@ -72,4 +79,4 @@ func (s *Manager) Contacts(query string) ([]models.Contact, error) { return nil, envelope.NewError(envelope.GeneralError, "Error searching contacts", nil) } return results, nil -} \ No newline at end of file +}