Skip to content

Commit a3c061c

Browse files
committed
[client] add sort param to list messages options
1 parent ab2f599 commit a3c061c

2 files changed

Lines changed: 40 additions & 8 deletions

File tree

smsgateway/requests_3rdparty.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,17 @@ func (o ListInboxOptions) ToURLValues() url.Values {
8585
return values
8686
}
8787

88-
// ListMessagesOptions holds optional filters for listing messages.
88+
// ListMessagesOptions holds optional filters and sorting for listing messages.
89+
// Sorting follows the JSON:API specification (sort parameter).
8990
type ListMessagesOptions struct {
90-
From *time.Time `query:"from" validate:"omitempty"`
91-
To *time.Time `query:"to" validate:"omitempty"`
92-
State *string `query:"state" validate:"omitempty,oneof=Pending Cancelling Cancelled Processed Sent Delivered Failed"`
93-
DeviceID *string `query:"deviceId" validate:"omitempty,len=21"`
94-
Limit *int `query:"limit" validate:"omitempty,min=1,max=100"`
95-
Offset *int `query:"offset" validate:"omitempty,min=0"`
96-
IncludeContent *bool `query:"includeContent"`
91+
From *time.Time `query:"from"`
92+
To *time.Time `query:"to"`
93+
State *string `query:"state" validate:"omitempty,oneof=Pending Cancelling Cancelled Processed Sent Delivered Failed"`
94+
DeviceID *string `query:"deviceId" validate:"omitempty,len=21"`
95+
Limit *int `query:"limit" validate:"omitempty,min=1,max=100"`
96+
Offset *int `query:"offset" validate:"omitempty,min=0"`
97+
IncludeContent *bool `query:"includeContent"`
98+
Sort *MessagesSortOrder `query:"sort" validate:"omitempty,oneof=created_at -created_at"`
9799
}
98100

99101
// Validate checks if the ListMessagesOptions are valid.
@@ -129,5 +131,15 @@ func (o ListMessagesOptions) ToURLValues() url.Values {
129131
if o.IncludeContent != nil {
130132
values.Set("includeContent", strconv.FormatBool(*o.IncludeContent))
131133
}
134+
if o.Sort != nil {
135+
values.Set("sort", string(*o.Sort))
136+
}
132137
return values
133138
}
139+
140+
type MessagesSortOrder string
141+
142+
const (
143+
CreatedAtAscending MessagesSortOrder = "created_at"
144+
CreatedAtDescending MessagesSortOrder = "-created_at"
145+
)

smsgateway/requests_3rdparty_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,24 @@ func TestListMessagesOptions_ToURLValues(t *testing.T) {
376376
"includeContent": {"false"},
377377
},
378378
},
379+
{
380+
name: "Sort created_at ascending",
381+
options: smsgateway.ListMessagesOptions{
382+
Sort: ptr(smsgateway.CreatedAtAscending),
383+
},
384+
expected: url.Values{
385+
"sort": {"created_at"},
386+
},
387+
},
388+
{
389+
name: "Sort created_at descending",
390+
options: smsgateway.ListMessagesOptions{
391+
Sort: ptr(smsgateway.CreatedAtDescending),
392+
},
393+
expected: url.Values{
394+
"sort": {"-created_at"},
395+
},
396+
},
379397
{
380398
name: "All fields set",
381399
options: smsgateway.ListMessagesOptions{
@@ -386,6 +404,7 @@ func TestListMessagesOptions_ToURLValues(t *testing.T) {
386404
Limit: ptr(100),
387405
Offset: ptr(0),
388406
IncludeContent: ptr(true),
407+
Sort: ptr(smsgateway.CreatedAtDescending),
389408
},
390409
expected: url.Values{
391410
"from": {from.Format(time.RFC3339)},
@@ -395,6 +414,7 @@ func TestListMessagesOptions_ToURLValues(t *testing.T) {
395414
"limit": {"100"},
396415
"offset": {"0"},
397416
"includeContent": {"true"},
417+
"sort": {"-created_at"},
398418
},
399419
},
400420
}

0 commit comments

Comments
 (0)