summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-07-04 02:58:02 -0400
committerChristopher Speller <crspeller@gmail.com>2017-07-03 23:58:02 -0700
commitf54aee1ef5466fdf11803cd75be3b7267e68540f (patch)
tree6a7dbf14839186ab7c2c9c357a0dc43d7d524329
parent02335ddad42dcd048f8ef9f371dde90bdaedc1eb (diff)
downloadchat-f54aee1ef5466fdf11803cd75be3b7267e68540f.tar.gz
chat-f54aee1ef5466fdf11803cd75be3b7267e68540f.tar.bz2
chat-f54aee1ef5466fdf11803cd75be3b7267e68540f.zip
Add paging to the GET /emojis endpoint (#6802)
-rw-r--r--api/emoji.go2
-rw-r--r--api4/emoji.go2
-rw-r--r--api4/emoji_test.go11
-rw-r--r--app/emoji.go4
-rw-r--r--model/client4.go7
-rw-r--r--store/sql_emoji_store.go7
-rw-r--r--store/sql_emoji_store_test.go4
-rw-r--r--store/store.go2
8 files changed, 24 insertions, 15 deletions
diff --git a/api/emoji.go b/api/emoji.go
index 31620dc1a..337cfe6f5 100644
--- a/api/emoji.go
+++ b/api/emoji.go
@@ -36,7 +36,7 @@ func getEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- listEmoji, err := app.GetEmojiList()
+ listEmoji, err := app.GetEmojiList(0, 100000)
if err != nil {
c.Err = err
return
diff --git a/api4/emoji.go b/api4/emoji.go
index 1d9188af0..f29573383 100644
--- a/api4/emoji.go
+++ b/api4/emoji.go
@@ -81,7 +81,7 @@ func getEmojiList(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- listEmoji, err := app.GetEmojiList()
+ listEmoji, err := app.GetEmojiList(c.Params.Page, c.Params.PerPage)
if err != nil {
c.Err = err
return
diff --git a/api4/emoji_test.go b/api4/emoji_test.go
index dcd6dddb7..2ca18a9cc 100644
--- a/api4/emoji_test.go
+++ b/api4/emoji_test.go
@@ -173,7 +173,7 @@ func TestGetEmojiList(t *testing.T) {
emojis[idx] = emoji
}
- listEmoji, resp := Client.GetEmojiList()
+ listEmoji, resp := Client.GetEmojiList(0, 100)
CheckNoError(t, resp)
for _, emoji := range emojis {
found := false
@@ -190,7 +190,7 @@ func TestGetEmojiList(t *testing.T) {
_, resp = Client.DeleteEmoji(emojis[0].Id)
CheckNoError(t, resp)
- listEmoji, resp = Client.GetEmojiList()
+ listEmoji, resp = Client.GetEmojiList(0, 100)
CheckNoError(t, resp)
found := false
for _, savedEmoji := range listEmoji {
@@ -202,6 +202,13 @@ func TestGetEmojiList(t *testing.T) {
t.Fatalf("should not get a deleted emoji %v", emojis[0].Id)
}
}
+
+ listEmoji, resp = Client.GetEmojiList(0, 1)
+ CheckNoError(t, resp)
+
+ if len(listEmoji) != 1 {
+ t.Fatal("should only return 1")
+ }
}
func TestDeleteEmoji(t *testing.T) {
diff --git a/app/emoji.go b/app/emoji.go
index 9f09617e8..564085d82 100644
--- a/app/emoji.go
+++ b/app/emoji.go
@@ -66,8 +66,8 @@ func CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *m
}
}
-func GetEmojiList() ([]*model.Emoji, *model.AppError) {
- if result := <-Srv.Store.Emoji().GetAll(); result.Err != nil {
+func GetEmojiList(page, perPage int) ([]*model.Emoji, *model.AppError) {
+ if result := <-Srv.Store.Emoji().GetList(page*perPage, perPage); result.Err != nil {
return nil, result.Err
} else {
return result.Data.([]*model.Emoji), nil
diff --git a/model/client4.go b/model/client4.go
index 8df1f8e32..da3dfacb7 100644
--- a/model/client4.go
+++ b/model/client4.go
@@ -2699,9 +2699,10 @@ func (c *Client4) CreateEmoji(emoji *Emoji, image []byte, filename string) (*Emo
return c.DoEmojiUploadFile(c.GetEmojisRoute(), body.Bytes(), writer.FormDataContentType())
}
-// GetEmojiList returns a list of custom emoji in the system.
-func (c *Client4) GetEmojiList() ([]*Emoji, *Response) {
- if r, err := c.DoApiGet(c.GetEmojisRoute(), ""); err != nil {
+// GetEmojiList returns a page of custom emoji on the system.
+func (c *Client4) GetEmojiList(page, perPage int) ([]*Emoji, *Response) {
+ query := fmt.Sprintf("?page=%v&per_page=%v", page, perPage)
+ if r, err := c.DoApiGet(c.GetEmojisRoute()+query, ""); err != nil {
return nil, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
diff --git a/store/sql_emoji_store.go b/store/sql_emoji_store.go
index 2a8ea080e..6e50248a9 100644
--- a/store/sql_emoji_store.go
+++ b/store/sql_emoji_store.go
@@ -150,7 +150,7 @@ func (es SqlEmojiStore) GetByName(name string) StoreChannel {
return storeChannel
}
-func (es SqlEmojiStore) GetAll() StoreChannel {
+func (es SqlEmojiStore) GetList(offset, limit int) StoreChannel {
storeChannel := make(StoreChannel, 1)
go func() {
@@ -164,8 +164,9 @@ func (es SqlEmojiStore) GetAll() StoreChannel {
FROM
Emoji
WHERE
- DeleteAt = 0`); err != nil {
- result.Err = model.NewLocAppError("SqlEmojiStore.Get", "store.sql_emoji.get_all.app_error", nil, err.Error())
+ DeleteAt = 0
+ LIMIT :Limit OFFSET :Offset`, map[string]interface{}{"Offset": offset, "Limit": limit}); err != nil {
+ result.Err = model.NewAppError("SqlEmojiStore.GetList", "store.sql_emoji.get_all.app_error", nil, err.Error(), http.StatusInternalServerError)
} else {
result.Data = emoji
}
diff --git a/store/sql_emoji_store_test.go b/store/sql_emoji_store_test.go
index 09cdbeead..25e0f7916 100644
--- a/store/sql_emoji_store_test.go
+++ b/store/sql_emoji_store_test.go
@@ -126,7 +126,7 @@ func TestEmojiGetByName(t *testing.T) {
}
}
-func TestEmojiGetAll(t *testing.T) {
+func TestEmojiGetList(t *testing.T) {
Setup()
emojis := []model.Emoji{
@@ -153,7 +153,7 @@ func TestEmojiGetAll(t *testing.T) {
}
}()
- if result := <-store.Emoji().GetAll(); result.Err != nil {
+ if result := <-store.Emoji().GetList(0, 100); result.Err != nil {
t.Fatal(result.Err)
} else {
for _, emoji := range emojis {
diff --git a/store/store.go b/store/store.go
index 9ae5f4b81..0007f495e 100644
--- a/store/store.go
+++ b/store/store.go
@@ -349,7 +349,7 @@ type EmojiStore interface {
Save(emoji *model.Emoji) StoreChannel
Get(id string, allowFromCache bool) StoreChannel
GetByName(name string) StoreChannel
- GetAll() StoreChannel
+ GetList(offset, limit int) StoreChannel
Delete(id string, time int64) StoreChannel
}