feat(search): align conversation search order

This commit is contained in:
2026-06-07 08:21:17 +08:00
parent 0affcf53a3
commit 7b8bca6034
3 changed files with 33 additions and 6 deletions
+2 -2
View File
@@ -199,9 +199,9 @@ func (r *SearchRepo) searchConversationsInternal(ctx context.Context, accountID
// Apply sort + pagination
orderClause := filter.OrderClause()
// Conversations default to last_activity_at DESC NULLS LAST
// Chatwoot SearchService#filter_conversations orders by created_at DESC.
if filter.SortBy == "created_at" || filter.SortBy == "" {
orderClause = "conversations.last_activity_at DESC NULLS LAST, conversations.id DESC"
orderClause = "conversations.created_at DESC, conversations.id DESC"
}
err := q.Offset(filter.Offset()).Limit(filter.PerPage).
+23
View File
@@ -362,6 +362,29 @@ func TestSearchRepo_SearchConversations_DoesNotMatchLabelsOrMessages(t *testing.
assert.Empty(t, results)
}
func TestSearchRepo_SearchConversations_DefaultOrderUsesCreatedAt(t *testing.T) {
db := setupTestDB(t)
repo := NewSearchRepo(db)
account := createTestAccountForSearch(t, db)
older := createTestConversationForSearch(t, db, account.ID, "open", "")
newer := createTestConversationForSearch(t, db, account.ID, "open", "")
base := time.Date(2026, 6, 7, 12, 0, 0, 0, time.UTC)
olderActivity := base.Add(time.Hour).Unix()
newerActivity := base.Add(-time.Hour).Unix()
require.NoError(t, db.Model(older).Updates(map[string]any{"created_at": base.Add(-time.Hour), "last_activity_at": olderActivity}).Error)
require.NoError(t, db.Model(newer).Updates(map[string]any{"created_at": base.Add(time.Hour), "last_activity_at": newerActivity}).Error)
filter := &search.SearchFilter{Page: 1, PerPage: 25}
results, total, err := repo.SearchConversations(context.Background(), account.ID, "", filter)
require.NoError(t, err)
assert.Equal(t, int64(2), total)
require.Len(t, results, 2)
assert.Equal(t, newer.ID, results[0].ID)
assert.Equal(t, older.ID, results[1].ID)
}
func TestSearchRepo_SearchConversations_WithStatusFilter(t *testing.T) {
skipIfSQLite(t)
db := setupTestDB(t)