mirror of
https://github.com/abhinavxd/libredesk.git
synced 2025-10-23 05:11:57 +00:00
feat: allow searching conversations by contact email address
This commit is contained in:
@@ -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>
|
||||
|
@@ -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",
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user