Skip to content

Commit 284d8d7

Browse files
added prefix '_' to total_size_needed (#427)
* added prefix '_' to total_size_needed * fixed lint error
1 parent 312c3dd commit 284d8d7

File tree

4 files changed

+62
-21
lines changed

4 files changed

+62
-21
lines changed

gateway/gateway.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,9 @@ func ClientUnaryInterceptor(parentCtx context.Context, method string, req, reply
8888
l := vals.Get(limitQueryKey)
8989
o := vals.Get(offsetQueryKey)
9090
pt := vals.Get(pageTokenQueryKey)
91+
t := vals.Get(isTotalSizeNeededQueryKey)
9192

92-
p, err = query.ParsePagination(l, o, pt)
93+
p, err = query.ParsePagination(l, o, pt, t)
9394
if err != nil {
9495
return status.Error(codes.InvalidArgument, err.Error())
9596
}

gateway/operator.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ import (
1111
)
1212

1313
const (
14-
filterQueryKey = "_filter"
15-
sortQueryKey = "_order_by"
16-
fieldsQueryKey = "_fields"
17-
limitQueryKey = "_limit"
18-
offsetQueryKey = "_offset"
19-
pageTokenQueryKey = "_page_token"
20-
searchQueryKey = "_fts"
21-
pageInfoSizeMetaKey = "status-page-info-size"
22-
pageInfoOffsetMetaKey = "status-page-info-offset"
23-
pageInfoPageTokenMetaKey = "status-page-info-page_token"
14+
filterQueryKey = "_filter"
15+
sortQueryKey = "_order_by"
16+
fieldsQueryKey = "_fields"
17+
limitQueryKey = "_limit"
18+
offsetQueryKey = "_offset"
19+
pageTokenQueryKey = "_page_token"
20+
searchQueryKey = "_fts"
21+
isTotalSizeNeededQueryKey = "_is_total_size_needed"
22+
pageInfoSizeMetaKey = "status-page-info-size"
23+
pageInfoOffsetMetaKey = "status-page-info-offset"
24+
pageInfoPageTokenMetaKey = "status-page-info-page_token"
25+
pageInfoPageTotalSizeMetaKey = "status-page-info-total_size"
2426

2527
query_url = "query_url"
2628
)
@@ -55,5 +57,9 @@ func SetPageInfo(ctx context.Context, p *query.PageInfo) error {
5557
m[pageInfoSizeMetaKey] = strconv.FormatUint(uint64(s), 10)
5658
}
5759

60+
if t := p.GetTotalSize(); t != 0 {
61+
m[pageInfoPageTotalSizeMetaKey] = strconv.FormatUint(uint64(t), 10)
62+
}
63+
5864
return grpc.SetHeader(ctx, metadata.New(m))
5965
}

query/pagination.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const (
1414

1515
// Pagination parses string representation of pagination limit, offset.
1616
// Returns error if limit or offset has invalid syntax or out of range.
17-
func ParsePagination(limit, offset, ptoken string) (*Pagination, error) {
17+
func ParsePagination(limit, offset, ptoken, isTotalSizeNeeded string) (*Pagination, error) {
1818
p := new(Pagination)
1919

2020
if limit != "" {
@@ -43,6 +43,14 @@ func ParsePagination(limit, offset, ptoken string) (*Pagination, error) {
4343
p.PageToken = ptoken
4444
}
4545

46+
if isTotalSizeNeeded != "" {
47+
u, err := strconv.ParseBool(isTotalSizeNeeded)
48+
if err != nil {
49+
return nil, fmt.Errorf("pagination: is_total_size_needed - %s", err.(*strconv.NumError).Err)
50+
}
51+
p.IsTotalSizeNeeded = u
52+
}
53+
4654
return p, nil
4755
}
4856

query/pagination_test.go

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package query
22

33
import (
44
"testing"
5+
6+
"github.com/stretchr/testify/assert"
57
)
68

79
func TestParsePagination(t *testing.T) {
810
// invalid limit
9-
_, err := ParsePagination("1s", "0", "ptoken")
11+
_, err := ParsePagination("1s", "0", "ptoken", "")
1012
if err == nil {
1113
t.Error("unexpected nil error - expected: pagination: limit - invalid syntax")
1214
}
@@ -15,7 +17,7 @@ func TestParsePagination(t *testing.T) {
1517
}
1618

1719
// negative limit
18-
_, err = ParsePagination("-1", "0", "ptoken")
20+
_, err = ParsePagination("-1", "0", "ptoken", "")
1921
if err == nil {
2022
t.Error("unexpected nil error - expected: pagination: limit must be a positive value")
2123
}
@@ -24,7 +26,7 @@ func TestParsePagination(t *testing.T) {
2426
}
2527

2628
// zero limit
27-
_, err = ParsePagination("0", "0", "ptoken")
29+
_, err = ParsePagination("0", "0", "ptoken", "")
2830
if err == nil {
2931
t.Error("unexpected nil error - expected: pagination: limit must be a positive value")
3032
}
@@ -33,7 +35,7 @@ func TestParsePagination(t *testing.T) {
3335
}
3436

3537
// invalid offset
36-
_, err = ParsePagination("", "0w", "ptoken")
38+
_, err = ParsePagination("", "0w", "ptoken", "")
3739
if err == nil {
3840
t.Error("unexpected nil error - expected: pagination: offset - invalid syntax")
3941
}
@@ -42,7 +44,7 @@ func TestParsePagination(t *testing.T) {
4244
}
4345

4446
// negative offset
45-
_, err = ParsePagination("", "-1", "ptoken")
47+
_, err = ParsePagination("", "-1", "ptoken", "")
4648
if err == nil {
4749
t.Error("unexpected nil error - expected: pagination: offset - negative value")
4850
}
@@ -51,7 +53,7 @@ func TestParsePagination(t *testing.T) {
5153
}
5254

5355
// null offset
54-
p, err := ParsePagination("", "null", "ptoken")
56+
p, err := ParsePagination("", "null", "ptoken", "")
5557
if err != nil {
5658
t.Errorf("unexpected error: %v", err)
5759
}
@@ -60,14 +62,14 @@ func TestParsePagination(t *testing.T) {
6062
}
6163

6264
// first page
63-
p, err = ParsePagination("", "0", "ptoken")
65+
p, err = ParsePagination("", "0", "ptoken", "")
6466
if err != nil {
6567
t.Errorf("unexpected error: %s", err)
6668
}
6769
if !p.FirstPage() {
6870
t.Errorf("invalid value of first page: %v - expected: true", p.FirstPage())
6971
}
70-
p, err = ParsePagination("", "100", "null")
72+
p, err = ParsePagination("", "100", "null", "")
7173
if err != nil {
7274
t.Errorf("unexpected error: %s", err)
7375
}
@@ -81,7 +83,7 @@ func TestParsePagination(t *testing.T) {
8183
}
8284

8385
// valid pagination
84-
p, err = ParsePagination("1000", "100", "ptoken")
86+
p, err = ParsePagination("1000", "100", "ptoken", "")
8587
if err != nil {
8688
t.Errorf("unexpected error: %s", err)
8789
}
@@ -94,6 +96,30 @@ func TestParsePagination(t *testing.T) {
9496
if p.GetPageToken() != "ptoken" {
9597
t.Errorf("invalid page token: %q - expected: ptoken", p.GetPageToken())
9698
}
99+
100+
// valid pagination with isTotalSizeNeeded=true
101+
p, err = ParsePagination("1000", "100", "ptoken", "true")
102+
if err != nil {
103+
t.Errorf("unexpected error: %s", err)
104+
}
105+
assert.Equal(t, true, p.GetIsTotalSizeNeeded())
106+
107+
// valid pagination with isTotalSizeNeeded=false
108+
p, err = ParsePagination("1000", "100", "ptoken", "false")
109+
if err != nil {
110+
t.Errorf("unexpected error: %s", err)
111+
}
112+
assert.Equal(t, false, p.GetIsTotalSizeNeeded())
113+
114+
// valid pagination with isTotalSizeNeeded=null
115+
_, err = ParsePagination("1000", "100", "ptoken", "null")
116+
if err == nil {
117+
t.Error("unexpected nil error - expected: pagination: is_total_size_needed - invalid syntax")
118+
}
119+
if err.Error() != "pagination: is_total_size_needed - invalid syntax" {
120+
t.Errorf("invalid error: %s - expected: pagination: is_total_size_needed - invalid syntax", err)
121+
}
122+
97123
}
98124

99125
func TestPageInfo(t *testing.T) {

0 commit comments

Comments
 (0)