Skip to content

Commit

Permalink
NOISSUE - Add readers pagination in SDK (#736)
Browse files Browse the repository at this point in the history
* NOISSUE - Add readers pagination in SDK

Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>

* Fix reviews

Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>
  • Loading branch information
manuio authored and drasko committed May 7, 2019
1 parent c37cbf9 commit d4551af
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 15 deletions.
29 changes: 16 additions & 13 deletions sdk/go/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ import (
"io/ioutil"
"net/http"
"strings"

"github.com/mainflux/mainflux"
)

func (sdk mfSDK) SendMessage(chanName, msg, token string) error {
Expand Down Expand Up @@ -53,7 +51,7 @@ func (sdk mfSDK) SendMessage(chanName, msg, token string) error {
return nil
}

func (sdk mfSDK) ReadMessages(chanName, token string) ([]mainflux.Message, error) {
func (sdk mfSDK) ReadMessages(chanName, token string) (MessagesPage, error) {
chanNameParts := strings.SplitN(chanName, ".", 2)
chanID := chanNameParts[0]
subtopicPart := ""
Expand All @@ -66,36 +64,41 @@ func (sdk mfSDK) ReadMessages(chanName, token string) ([]mainflux.Message, error

req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
return nil, err
return MessagesPage{}, err
}

resp, err := sdk.sendRequest(req, token, string(sdk.msgContentType))
if err != nil {
return nil, err
return MessagesPage{}, err
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
return MessagesPage{}, err
}

if resp.StatusCode != http.StatusOK {
switch resp.StatusCode {
case http.StatusBadRequest:
return nil, ErrInvalidArgs
return MessagesPage{}, ErrInvalidArgs
case http.StatusForbidden:
return nil, ErrUnauthorized
return MessagesPage{}, ErrUnauthorized
default:
return nil, ErrFailedRead
return MessagesPage{}, ErrFailedRead
}
}

var l listMessagesRes
if err := json.Unmarshal(body, &l); err != nil {
return nil, err
mp := messagesPageRes{}
if err := json.Unmarshal(body, &mp); err != nil {
return MessagesPage{}, err
}

return l.Messages, nil
return MessagesPage{
Total: mp.Total,
Offset: mp.Offset,
Limit: mp.Limit,
Messages: mp.Messages,
}, nil
}

func (sdk *mfSDK) SetContentType(ct ContentType) error {
Expand Down
5 changes: 4 additions & 1 deletion sdk/go/responses.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ type channelsPageRes struct {
Limit uint64 `json:"limit"`
}

type listMessagesRes struct {
type messagesPageRes struct {
Total uint64 `json:"total"`
Offset uint64 `json:"offset"`
Limit uint64 `json:"limit"`
Messages []mainflux.Message `json:"messages,omitempty"`
}
10 changes: 9 additions & 1 deletion sdk/go/sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,14 @@ type ChannelsPage struct {
Limit uint64 `json:"limit"`
}

// MessagesPage contains list of messages in a page with proper metadata.
type MessagesPage struct {
Total uint64 `json:"total"`
Offset uint64 `json:"offset"`
Limit uint64 `json:"limit"`
Messages []mainflux.Message `json:"messages,omitempty"`
}

// SDK contains Mainflux API.
type SDK interface {
// CreateUser registers mainflux user.
Expand Down Expand Up @@ -168,7 +176,7 @@ type SDK interface {
SendMessage(chanID, msg, token string) error

// ReadMessages read messages of specified channel.
ReadMessages(chanID, token string) ([]mainflux.Message, error)
ReadMessages(chanID, token string) (MessagesPage, error)

// SetContentType sets message content type.
SetContentType(ct ContentType) error
Expand Down

0 comments on commit d4551af

Please sign in to comment.