fix(crm): deterministic sortBy=id in contact paged lists
Release Please / Release Please (push) Skipped
Release / GoReleaser (push) Skipped
Tests / Secret scan (gitleaks) (push) Skipped
Tests / Test (Go 1.25) (push) Skipped
Tests / Test (Go stable) (push) Skipped
Tests / Secret scan (gitleaks) (pull_request) Successful in 4s
Tests / Test (Go 1.25) (pull_request) Successful in 26s
Tests / Test (Go stable) (pull_request) Successful in 1m21s

This commit is contained in:
2026-09-03 04:50:15 +01:00
parent 4d8af7a2fe
commit 4d91726179
+6
View File
@@ -15,10 +15,15 @@ import (
) )
// ListContacts returns a page of CRM contacts and the total count. // ListContacts returns a page of CRM contacts and the total count.
// sortBy=id is always set: OnlyOffice filter.json without an explicit sort
// order is non-deterministic on large contact sets, so a paged walk
// (ListAllContacts, ListContactsByTag, FindCompany, FindPerson) can skip or
// duplicate contacts across page boundaries.
func (c *Client) ListContacts(ctx context.Context, count, startIndex int, search string) ([]map[string]any, int, error) { func (c *Client) ListContacts(ctx context.Context, count, startIndex int, search string) ([]map[string]any, int, error) {
q := url.Values{} q := url.Values{}
q.Set("count", strconv.Itoa(count)) q.Set("count", strconv.Itoa(count))
q.Set("startIndex", strconv.Itoa(startIndex)) q.Set("startIndex", strconv.Itoa(startIndex))
q.Set("sortBy", "id")
if search != "" { if search != "" {
q.Set("filterValue", search) q.Set("filterValue", search)
} }
@@ -306,6 +311,7 @@ func (c *Client) ListContactsByTag(ctx context.Context, tagName string, count, s
q.Set("count", strconv.Itoa(count)) q.Set("count", strconv.Itoa(count))
q.Set("startIndex", strconv.Itoa(startIndex)) q.Set("startIndex", strconv.Itoa(startIndex))
q.Set("tags", tagName) q.Set("tags", tagName)
q.Set("sortBy", "id")
raw, err := c.getJSON(ctx, "/api/2.0/crm/contact/filter.json?"+q.Encode()) raw, err := c.getJSON(ctx, "/api/2.0/crm/contact/filter.json?"+q.Encode())
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err