diff --git a/cli/groups.go b/cli/groups.go index 64d2c26a25..bc8d885b8d 100644 --- a/cli/groups.go +++ b/cli/groups.go @@ -59,7 +59,11 @@ var cmdGroups = []cobra.Command{ logUsage(cmd.Use) return } - l, err := sdk.Groups(uint64(Offset), uint64(Limit), args[1]) + meta := mfxsdk.PageMetadata{ + Offset: uint64(Offset), + Limit: uint64(Limit), + } + l, err := sdk.Groups(meta, args[1]) if err != nil { logError(err) return diff --git a/pkg/sdk/go/groups.go b/pkg/sdk/go/groups.go index 8e126ac509..01d93a927c 100644 --- a/pkg/sdk/go/groups.go +++ b/pkg/sdk/go/groups.go @@ -9,6 +9,8 @@ import ( "fmt" "io/ioutil" "net/http" + "net/url" + "strconv" "strings" "github.com/mainflux/mainflux/pkg/errors" @@ -156,9 +158,28 @@ func (sdk mfSDK) Members(groupID, token string, offset, limit uint64) (MembersPa return tp, nil } -func (sdk mfSDK) Groups(offset, limit uint64, token string) (GroupsPage, error) { - url := fmt.Sprintf("%s/%s?offset=%d&limit=%d&tree=false", sdk.authURL, groupsEndpoint, offset, limit) - return sdk.getGroups(token, url) +func (sdk mfSDK) Groups(meta PageMetadata, token string) (GroupsPage, error) { + u, err := url.Parse(sdk.authURL) + if err != nil { + return GroupsPage{}, err + } + u.Path = groupsEndpoint + q := u.Query() + q.Add("offset", strconv.FormatUint(meta.Offset, 10)) + if meta.Limit != 0 { + q.Add("limit", strconv.FormatUint(meta.Limit, 10)) + } + if meta.Level != 0 { + q.Add("level", strconv.FormatUint(meta.Level, 10)) + } + if meta.Name != "" { + q.Add("name", meta.Name) + } + if meta.Type != "" { + q.Add("type", meta.Type) + } + u.RawQuery = q.Encode() + return sdk.getGroups(token, u.String()) } func (sdk mfSDK) Parents(id string, offset, limit uint64, token string) (GroupsPage, error) { diff --git a/pkg/sdk/go/responses.go b/pkg/sdk/go/responses.go index 9f26bc8950..0b23fff589 100644 --- a/pkg/sdk/go/responses.go +++ b/pkg/sdk/go/responses.go @@ -57,7 +57,7 @@ type UsersPage struct { } type MembersPage struct { - Members []Member `json:"members"` + Members []string `json:"members"` pageRes } diff --git a/pkg/sdk/go/sdk.go b/pkg/sdk/go/sdk.go index 56100fcd9f..f1098d238e 100644 --- a/pkg/sdk/go/sdk.go +++ b/pkg/sdk/go/sdk.go @@ -95,6 +95,16 @@ type Group struct { Metadata map[string]interface{} `json:"metadata,omitempty"` } +type PageMetadata struct { + Total uint64 + Offset uint64 + Limit uint64 + Level uint64 + Name string + Type string + Metadata map[string]interface{} +} + // Thing represents mainflux thing. type Thing struct { ID string `json:"id,omitempty"` @@ -110,12 +120,6 @@ type Channel struct { Metadata map[string]interface{} `json:"metadata,omitempty"` } -// Member represents group member. -type Member struct { - ID string - Type string -} - type Key struct { ID string Type uint32 @@ -170,8 +174,8 @@ type SDK interface { // DeleteGroup deletes users group. DeleteGroup(id, token string) error - // Groups returns page of users groups. - Groups(offset, limit uint64, token string) (GroupsPage, error) + // Groups returns page of groups. + Groups(meta PageMetadata, token string) (GroupsPage, error) // Parents returns page of users groups. Parents(id string, offset, limit uint64, token string) (GroupsPage, error)