feat: allow searching conversations by contact email address

This commit is contained in:
Abhinav Raut
2025-03-21 23:54:43 +05:30
parent def0bb8e4c
commit 0f12b2a3f3
3 changed files with 28 additions and 9 deletions

View File

@@ -28,7 +28,7 @@
<div v-else class="mt-16 text-center">
<h2 class="text-2xl font-semibold text-primary mb-4">Search conversations</h2>
<p class="text-lg text-muted-foreground">
Search by reference number, messages, or any keywords related to your conversations.
Search by reference number, contact email address or messages in conversations.
</p>
</div>
</div>

View File

@@ -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",

View File

@@ -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
}
}