diff --git a/internal/company/form.go b/internal/company/form.go index 181b1dd..80a8942 100644 --- a/internal/company/form.go +++ b/internal/company/form.go @@ -76,7 +76,7 @@ type SearchForm struct { FoundedYearMax *int `query:"founded_year_max" valid:"optional,range(1800|2100)"` Limit *int `query:"limit" valid:"optional,range(1|100)"` Offset *int `query:"offset" valid:"optional,range(0|1000000)"` - SortBy *string `query:"sort_by" valid:"optional,in(name|type|industry|created_at|updated_at|status|employee_count|annual_revenue|email|phone|country|state|language|currency)"` + SortBy *string `query:"sort_by" valid:"optional,in(name|type|industry|created_at|updated_at|status|employee_count|annual_revenue|email|phone|country|state|address.country|address.state|language|currency)"` SortOrder *string `query:"sort_order" valid:"optional,in(asc|desc)"` } diff --git a/pkg/mongo/cursor_test.go b/pkg/mongo/cursor_test.go index fad37c4..b776b6d 100644 --- a/pkg/mongo/cursor_test.go +++ b/pkg/mongo/cursor_test.go @@ -53,3 +53,29 @@ func TestHashFilterStable(t *testing.T) { t.Fatalf("expected stable non-empty hash, got %q and %q", a, b) } } + +func TestDocumentSortValueNestedField(t *testing.T) { + doc := bson.M{ + "_id": bson.NewObjectID(), + "address": bson.M{ + "country": "US", + "state": "NY", + }, + } + + country, err := documentSortValue(doc, "address.country") + if err != nil { + t.Fatalf("address.country: %v", err) + } + if country != "US" { + t.Fatalf("expected US, got %v", country) + } + + state, err := documentSortValue(doc, "address.state") + if err != nil { + t.Fatalf("address.state: %v", err) + } + if state != "NY" { + t.Fatalf("expected NY, got %v", state) + } +}