Skip to content

Commit 2b3fe10

Browse files
committed
Fix GraphQL pagination
1 parent 365c07f commit 2b3fe10

File tree

2 files changed

+7
-20
lines changed

2 files changed

+7
-20
lines changed

graphql/functional_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ func TestHandler(t *testing.T) {
196196
r, _ = http.NewRequest("GET", "/?query={posts(id:\"ar5qrgukj5l7a6eq2ps0\"){id,meta{title},followers(limit:2){user{id,name}}}}", nil)
197197
s, b = performRequest(gql, r)
198198
assert.Equal(t, 200, s)
199-
assert.Equal(t, "{\"data\":{\"posts\":{\"followers\":[{\"user\":{\"id\":\"fan1\",\"name\":\"Fan 1\"}},{\"user\":{\"id\":\"fan2\",\"name\":\"Fan 2\"}},{\"user\":{\"id\":\"fan3\",\"name\":\"Fan 3\"}}],\"id\":\"ar5qrgukj5l7a6eq2ps0\",\"meta\":{\"title\":\"First Post\"}}}}\n", b)
199+
assert.Equal(t, "{\"data\":{\"posts\":{\"followers\":[{\"user\":{\"id\":\"fan1\",\"name\":\"Fan 1\"}},{\"user\":{\"id\":\"fan2\",\"name\":\"Fan 2\"}}],\"id\":\"ar5qrgukj5l7a6eq2ps0\",\"meta\":{\"title\":\"First Post\"}}}}\n", b)
200200

201201
r, _ = http.NewRequest("POST", "/", bytes.NewBufferString("{postsList{id,thumb_s_url:thumbnail_url(height:80)}}"))
202202
s, b = performRequest(gql, r)

graphql/query.go

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"log"
77
"net/url"
8-
"strconv"
98
"strings"
109

1110
"github.com/graphql-go/graphql"
@@ -89,26 +88,14 @@ func listParamResolver(r *resource.Resource, p graphql.ResolveParams, params url
8988
if l := r.Conf().PaginationDefaultLimit; l > 0 {
9089
limit = l
9190
}
92-
if s, ok := p.Args["skip"].(string); ok && s != "" {
93-
i, err := strconv.ParseUint(s, 10, 32)
94-
if err != nil {
95-
return nil, 0, 0, errors.New("invalid `skip` parameter")
96-
}
97-
skip = int(i)
91+
if i, ok := p.Args["skip"].(int); ok && i >= 0 {
92+
skip = i
9893
}
99-
if p, ok := p.Args["page"].(string); ok && p != "" {
100-
i, err := strconv.ParseUint(p, 10, 32)
101-
if err != nil {
102-
return nil, 0, 0, errors.New("invalid `page` parameter")
103-
}
104-
page = int(i)
94+
if i, ok := p.Args["page"].(int); ok && i > 0 && i < 1000 {
95+
page = i
10596
}
106-
if l, ok := p.Args["limit"].(string); ok && l != "" {
107-
i, err := strconv.ParseUint(l, 10, 32)
108-
if err != nil {
109-
return nil, 0, 0, errors.New("invalid `limit` parameter")
110-
}
111-
limit = int(i)
97+
if i, ok := p.Args["limit"].(int); ok && i >= 0 && i < 1000 {
98+
limit = i
11299
}
113100
if page != 1 && limit == -1 {
114101
return nil, 0, 0, errors.New("cannot use `page' parameter with no `limit' paramter on a resource with no default pagination size")

0 commit comments

Comments
 (0)