1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-24 13:48:49 +08:00

NOISSUE: Fix: SDK ListGroupUsers function (#1936)

* fix: SDK function

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: listing of clients response

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: SDK functions

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: Listing of group parents and children

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: SDK functions

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: users and things response

Signed-off-by: Arvindh <arvindh91@gmail.com>

---------

Signed-off-by: Arvindh <arvindh91@gmail.com>
This commit is contained in:
Arvindh 2023-10-19 21:26:31 +05:30 committed by GitHub
parent 34f293220c
commit 4ae0feced4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 57 additions and 79 deletions

View File

@ -87,15 +87,19 @@ func DecodeListParentsRequest(_ context.Context, r *http.Request) (interface{},
if err != nil {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
permission, err := apiutil.ReadStringQuery(r, api.PermissionKey, api.DefPermission)
if err != nil {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
req := listGroupsReq{
token: apiutil.ExtractBearerToken(r),
tree: tree,
Page: mfgroups.Page{
Level: level,
ID: chi.URLParam(r, "groupID"),
PageMeta: pm,
Direction: 1,
Level: level,
ID: chi.URLParam(r, "groupID"),
Permission: permission,
PageMeta: pm,
Direction: +1,
},
}
return req, nil
@ -116,15 +120,19 @@ func DecodeListChildrenRequest(_ context.Context, r *http.Request) (interface{},
if err != nil {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
permission, err := apiutil.ReadStringQuery(r, api.PermissionKey, api.DefPermission)
if err != nil {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
req := listGroupsReq{
token: apiutil.ExtractBearerToken(r),
tree: tree,
Page: mfgroups.Page{
Level: level,
ID: chi.URLParam(r, "groupID"),
PageMeta: pm,
Direction: -1,
Level: level,
ID: chi.URLParam(r, "groupID"),
Permission: permission,
PageMeta: pm,
Direction: -1,
},
}
return req, nil

View File

@ -190,7 +190,9 @@ func (repo ClientRepository) RetrieveAll(ctx context.Context, pm clients.Page) (
func (repo ClientRepository) RetrieveAllByIDs(ctx context.Context, pm clients.Page) (clients.ClientsPage, error) {
if len(pm.IDs) <= 0 {
return clients.ClientsPage{}, errors.ErrNotFound
return clients.ClientsPage{
Page: clients.Page{Total: pm.Total, Offset: pm.Offset, Limit: pm.Limit},
}, nil
}
query, err := pageQuery(pm)
if err != nil {

View File

@ -59,7 +59,7 @@ type Page struct {
Level uint64
ID string
Permission string
Direction int64 // ancestors (-1) or descendants (+1)
Direction int64 // ancestors (+1) or descendants (-1)
Groups []Group
}

View File

@ -154,7 +154,7 @@ func (sdk mfSDK) AddUserToChannel(channelID string, req UsersRelationRequest, to
url := fmt.Sprintf("%s/%s/%s/%s/%s", sdk.thingsURL, channelsEndpoint, channelID, usersEndpoint, assignEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
return sdkerr
}
@ -166,7 +166,7 @@ func (sdk mfSDK) RemoveUserFromChannel(channelID string, req UsersRelationReques
url := fmt.Sprintf("%s/%s/%s/%s/%s", sdk.thingsURL, channelsEndpoint, channelID, usersEndpoint, unassignEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusNoContent)
return sdkerr
}
@ -195,7 +195,7 @@ func (sdk mfSDK) AddUserGroupToChannel(channelID string, req UserGroupsRequest,
url := fmt.Sprintf("%s/%s/%s/%s/%s", sdk.thingsURL, channelsEndpoint, channelID, groupsEndpoint, assignEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
return sdkerr
}
@ -207,7 +207,7 @@ func (sdk mfSDK) RemoveUserGroupFromChannel(channelID string, req UserGroupsRequ
url := fmt.Sprintf("%s/%s/%s/%s/%s", sdk.thingsURL, channelsEndpoint, channelID, groupsEndpoint, unassignEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusNoContent)
return sdkerr
}
@ -236,7 +236,7 @@ func (sdk mfSDK) Connect(conn Connection, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s", sdk.thingsURL, connectEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
return sdkerr
}
@ -257,7 +257,7 @@ func (sdk mfSDK) Disconnect(connIDs Connection, token string) errors.SDKError {
func (sdk mfSDK) ConnectThing(thingID, channelID, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s/%s/%s/%s/%s", sdk.thingsURL, channelsEndpoint, channelID, thingsEndpoint, thingID, connectEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, nil, nil, http.StatusNoContent)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, nil, nil, http.StatusCreated)
return sdkerr
}

View File

@ -153,7 +153,7 @@ func (sdk mfSDK) AddUserToGroup(groupID string, req UsersRelationRequest, token
url := fmt.Sprintf("%s/%s/%s/%s/%s", sdk.usersURL, groupsEndpoint, groupID, usersEndpoint, assignEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
return sdkerr
}
@ -165,25 +165,25 @@ func (sdk mfSDK) RemoveUserFromGroup(groupID string, req UsersRelationRequest, t
url := fmt.Sprintf("%s/%s/%s/%s/%s", sdk.usersURL, groupsEndpoint, groupID, usersEndpoint, unassignEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusNoContent)
return sdkerr
}
func (sdk mfSDK) ListGroupUsers(groupID string, pm PageMetadata, token string) (GroupsPage, errors.SDKError) {
func (sdk mfSDK) ListGroupUsers(groupID string, pm PageMetadata, token string) (UsersPage, errors.SDKError) {
url, err := sdk.withQueryParams(sdk.usersURL, fmt.Sprintf("%s/%s/%s", groupsEndpoint, groupID, usersEndpoint), pm)
if err != nil {
return GroupsPage{}, errors.NewSDKError(err)
return UsersPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return GroupsPage{}, sdkerr
return UsersPage{}, sdkerr
}
gp := GroupsPage{}
if err := json.Unmarshal(body, &gp); err != nil {
return GroupsPage{}, errors.NewSDKError(err)
up := UsersPage{}
if err := json.Unmarshal(body, &up); err != nil {
return UsersPage{}, errors.NewSDKError(err)
}
return gp, nil
return up, nil
}
func (sdk mfSDK) ListGroupChannels(groupID string, pm PageMetadata, token string) (GroupsPage, errors.SDKError) {

View File

@ -562,7 +562,7 @@ type SDK interface {
// }
// groups, _ := sdk.ListGroupUsers("groupID", pm, "token")
// fmt.Println(groups)
ListGroupUsers(groupID string, pm PageMetadata, token string) (GroupsPage, errors.SDKError)
ListGroupUsers(groupID string, pm PageMetadata, token string) (UsersPage, errors.SDKError)
// ListGroupChannels list all channels in the group id .
//

View File

@ -262,7 +262,7 @@ func (sdk mfSDK) ShareThing(thingID string, req UsersRelationRequest, token stri
return errors.NewSDKError(err)
}
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, thingsEndpoint, thingID, unshareEndpoint)
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, thingsEndpoint, thingID, shareEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
return sdkerr
@ -274,14 +274,14 @@ func (sdk mfSDK) UnshareThing(thingID string, req UsersRelationRequest, token st
return errors.NewSDKError(err)
}
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, thingsEndpoint, thingID, shareEndpoint)
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, thingsEndpoint, thingID, unshareEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
return sdkerr
}
func (sdk mfSDK) ListThingUsers(thingID string, pm PageMetadata, token string) (UsersPage, errors.SDKError) {
url, err := sdk.withQueryParams(sdk.thingsURL, fmt.Sprintf("%s/%s/%s", thingsEndpoint, thingID, usersEndpoint), pm)
url, err := sdk.withQueryParams(sdk.usersURL, fmt.Sprintf("%s/%s/%s", thingsEndpoint, thingID, usersEndpoint), pm)
if err != nil {
return UsersPage{}, errors.NewSDKError(err)
}

View File

@ -119,13 +119,13 @@ func listMembersEndpoint(svc things.Service) endpoint.Endpoint {
if err := req.validate(); err != nil {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
// TODO : remove svc.ListMembers and all functions to svc.ListClients https://github.com/absmach/magistrala/issues/5
page, err := svc.ListClientsByGroup(ctx, req.token, req.groupID, req.Page)
if err != nil {
return nil, err
}
return buildMembersResponse(page), nil
return buildClientsResponse(page), nil
}
}
@ -238,17 +238,17 @@ func disableClientEndpoint(svc things.Service) endpoint.Endpoint {
}
}
func buildMembersResponse(cp mfclients.MembersPage) memberPageRes {
res := memberPageRes{
func buildClientsResponse(cp mfclients.MembersPage) clientsPageRes {
res := clientsPageRes{
pageRes: pageRes{
Total: cp.Total,
Offset: cp.Offset,
Limit: cp.Limit,
},
Members: []viewMembersRes{},
Clients: []viewClientRes{},
}
for _, c := range cp.Members {
res.Members = append(res.Members, viewMembersRes{Client: c})
res.Clients = append(res.Clients, viewClientRes{Client: c})
}
return res

View File

@ -17,7 +17,6 @@ var (
_ mainflux.Response = (*deleteClientRes)(nil)
_ mainflux.Response = (*clientsPageRes)(nil)
_ mainflux.Response = (*viewMembersRes)(nil)
_ mainflux.Response = (*memberPageRes)(nil)
_ mainflux.Response = (*assignUsersGroupsRes)(nil)
_ mainflux.Response = (*unassignUsersGroupsRes)(nil)
_ mainflux.Response = (*connectChannelThingRes)(nil)
@ -122,23 +121,6 @@ func (res viewMembersRes) Empty() bool {
return false
}
type memberPageRes struct {
pageRes
Members []viewMembersRes `json:"things"`
}
func (res memberPageRes) Code() int {
return http.StatusOK
}
func (res memberPageRes) Headers() map[string]string {
return map[string]string{}
}
func (res memberPageRes) Empty() bool {
return false
}
type deleteClientRes struct {
mfclients.Client
}

View File

@ -110,12 +110,13 @@ func listMembersByGroupEndpoint(svc users.Service) endpoint.Endpoint {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
// TODO : remove svc.ListMembers and all functions to svc.ListClients https://github.com/absmach/magistrala/issues/5
page, err := svc.ListMembers(ctx, req.token, req.objectKind, req.objectID, req.Page)
if err != nil {
return nil, err
}
return buildMembersResponse(page), nil
return buildClientsResponse(page), nil
}
}
@ -128,12 +129,13 @@ func listMembersByChannelEndpoint(svc users.Service) endpoint.Endpoint {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
// TODO : remove svc.ListMembers and all functions to svc.ListClients https://github.com/absmach/magistrala/issues/5
page, err := svc.ListMembers(ctx, req.token, req.objectKind, req.objectID, req.Page)
if err != nil {
return nil, err
}
return buildMembersResponse(page), nil
return buildClientsResponse(page), nil
}
}
@ -145,12 +147,13 @@ func listMembersByThingEndpoint(svc users.Service) endpoint.Endpoint {
return nil, errors.Wrap(apiutil.ErrValidation, err)
}
// TODO : remove svc.ListMembers and all functions to svc.ListClients https://github.com/absmach/magistrala/issues/5
page, err := svc.ListMembers(ctx, req.token, req.objectKind, req.objectID, req.Page)
if err != nil {
return nil, err
}
return buildMembersResponse(page), nil
return buildClientsResponse(page), nil
}
}
@ -362,18 +365,18 @@ func disableClientEndpoint(svc users.Service) endpoint.Endpoint {
}
}
func buildMembersResponse(cp mfclients.MembersPage) memberPageRes {
res := memberPageRes{
func buildClientsResponse(cp mfclients.MembersPage) clientsPageRes {
res := clientsPageRes{
pageRes: pageRes{
Total: cp.Total,
Offset: cp.Offset,
Limit: cp.Limit,
},
Members: []viewMembersRes{},
Clients: []viewClientRes{},
}
for _, client := range cp.Members {
res.Members = append(res.Members, viewMembersRes{Client: client})
res.Clients = append(res.Clients, viewClientRes{Client: client})
}
return res

View File

@ -21,7 +21,6 @@ var (
_ mainflux.Response = (*deleteClientRes)(nil)
_ mainflux.Response = (*clientsPageRes)(nil)
_ mainflux.Response = (*viewMembersRes)(nil)
_ mainflux.Response = (*memberPageRes)(nil)
)
type pageRes struct {
@ -140,22 +139,6 @@ func (res viewMembersRes) Empty() bool {
return false
}
type memberPageRes struct {
pageRes
Members []viewMembersRes `json:"members"`
}
func (res memberPageRes) Code() int {
return http.StatusOK
}
func (res memberPageRes) Headers() map[string]string {
return map[string]string{}
}
func (res memberPageRes) Empty() bool {
return false
}
type deleteClientRes struct {
mfclients.Client `json:",inline"`