SMQ-3338 - Add created at period filter to entities (#3339)

Signed-off-by: Felix Gateru <felix.gateru@gmail.com>
This commit is contained in:
Felix Gateru
2026-03-04 14:37:35 +03:00
committed by GitHub
parent 2260293dfc
commit f8410b8940
35 changed files with 1736 additions and 302 deletions
+8
View File
@@ -162,6 +162,8 @@ type PageMetadata struct {
Tree bool `json:"tree,omitempty"`
StartLevel int64 `json:"start_level,omitempty"`
EndLevel int64 `json:"end_level,omitempty"`
CreatedFrom time.Time `json:"created_from,omitempty"`
CreatedTo time.Time `json:"created_to,omitempty"`
}
type Role struct {
@@ -1702,6 +1704,12 @@ func (pm PageMetadata) query() (string, error) {
if pm.To != 0 {
q.Add("to", strconv.FormatInt(pm.To, 10))
}
if !pm.CreatedFrom.IsZero() {
q.Add("created_from", pm.CreatedFrom.Format(time.RFC3339))
}
if !pm.CreatedTo.IsZero() {
q.Add("created_to", pm.CreatedTo.Format(time.RFC3339))
}
q.Add("with_attributes", strconv.FormatBool(pm.WithAttributes))
q.Add("with_metadata", strconv.FormatBool(pm.WithMetadata))
+93
View File
@@ -10,6 +10,7 @@ import (
"net/http/httptest"
"strings"
"testing"
"time"
grpcTokenV1 "github.com/absmach/supermq/api/grpc/token/v1"
api "github.com/absmach/supermq/api/http"
@@ -509,6 +510,98 @@ func TestListUsers(t *testing.T) {
},
err: nil,
},
{
desc: "list users with CreatedFrom",
token: validToken,
pageMeta: sdk.PageMetadata{
Offset: offset,
Limit: limit,
CreatedFrom: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
},
svcReq: users.Page{
Offset: offset,
Limit: limit,
CreatedFrom: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
Order: api.DefOrder,
Dir: api.DefDir,
},
svcRes: users.UsersPage{
Page: users.Page{
Total: uint64(len(cls[offset:limit])),
},
Users: convertUsers(cls[offset:limit]),
},
svcErr: nil,
response: sdk.UsersPage{
PageRes: sdk.PageRes{
Total: uint64(len(cls[offset:limit])),
},
Users: cls[offset:limit],
},
err: nil,
},
{
desc: "list users with CreatedTo",
token: validToken,
pageMeta: sdk.PageMetadata{
Offset: offset,
Limit: limit,
CreatedTo: time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC),
},
svcReq: users.Page{
Offset: offset,
Limit: limit,
CreatedTo: time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC),
Order: api.DefOrder,
Dir: api.DefDir,
},
svcRes: users.UsersPage{
Page: users.Page{
Total: uint64(len(cls[offset:limit])),
},
Users: convertUsers(cls[offset:limit]),
},
svcErr: nil,
response: sdk.UsersPage{
PageRes: sdk.PageRes{
Total: uint64(len(cls[offset:limit])),
},
Users: cls[offset:limit],
},
err: nil,
},
{
desc: "list users with both CreatedFrom and CreatedTo",
token: validToken,
pageMeta: sdk.PageMetadata{
Offset: offset,
Limit: limit,
CreatedFrom: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
CreatedTo: time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC),
},
svcReq: users.Page{
Offset: offset,
Limit: limit,
CreatedFrom: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
CreatedTo: time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC),
Order: api.DefOrder,
Dir: api.DefDir,
},
svcRes: users.UsersPage{
Page: users.Page{
Total: 2,
},
Users: []users.User{convertUser(cls[10]), convertUser(cls[20])},
},
svcErr: nil,
response: sdk.UsersPage{
PageRes: sdk.PageRes{
Total: 2,
},
Users: []sdk.User{cls[10], cls[20]},
},
err: nil,
},
{
desc: "list users with request that can't be marshalled",
token: validToken,