Skip to content

Commit f2af6ed

Browse files
committed
添加对offset的兼容
1 parent 3ed5f30 commit f2af6ed

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

http/request/pagging.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,17 @@ func NewPageRequestFromHTTP(req *http.Request) *PageRequest {
1818

1919
ps := qs.Get("page_size")
2020
pn := qs.Get("page_number")
21+
os := qs.Get("offset")
2122

2223
psUint64, _ := strconv.ParseUint(ps, 10, 64)
2324
pnUint64, _ := strconv.ParseUint(pn, 10, 64)
2425

26+
var offset *int64
27+
if os != "" {
28+
osInt64, _ := strconv.ParseInt(os, 10, 64)
29+
offset = &osInt64
30+
}
31+
2532
if psUint64 == 0 {
2633
psUint64 = DefaultPageSize
2734
}
@@ -32,6 +39,7 @@ func NewPageRequestFromHTTP(req *http.Request) *PageRequest {
3239
return &PageRequest{
3340
PageSize: uint(psUint64),
3441
PageNumber: uint(pnUint64),
42+
offset: offset,
3543
}
3644
}
3745

@@ -47,9 +55,15 @@ func NewPageRequest(ps uint, pn uint) *PageRequest {
4755
type PageRequest struct {
4856
PageSize uint `json:"page_size,omitempty" validate:"gte=1,lte=200"`
4957
PageNumber uint `json:"page_number,omitempty" validate:"gte=1"`
58+
offset *int64
5059
}
5160

5261
// Offset skip
62+
// 如果传入了offset则使用传入的offset参数
5363
func (p *PageRequest) Offset() int64 {
64+
if p.offset != nil {
65+
return *p.offset
66+
}
67+
5468
return int64(p.PageSize * (p.PageNumber - 1))
5569
}

http/request/pagging_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package request_test
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
7+
"github.com/infraboard/mcube/http/request"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestOffSet(t *testing.T) {
12+
shoud := assert.New(t)
13+
14+
req, _ := http.NewRequest("GET", "/", nil)
15+
pr := request.NewPageRequestFromHTTP(req)
16+
shoud.Equal(int64(0), pr.Offset())
17+
shoud.Equal(uint(20), pr.PageSize)
18+
shoud.Equal(uint(1), pr.PageNumber)
19+
20+
req, _ = http.NewRequest("GET", "/?page_size=20&page_number=1", nil)
21+
pr = request.NewPageRequestFromHTTP(req)
22+
shoud.Equal(int64(0), pr.Offset())
23+
24+
req, _ = http.NewRequest("GET", "/?page_size=20&page_number=2", nil)
25+
pr = request.NewPageRequestFromHTTP(req)
26+
shoud.Equal(int64(20), pr.Offset())
27+
28+
req, _ = http.NewRequest("GET", "/?page_size=20&page_number=2&offset=18", nil)
29+
pr = request.NewPageRequestFromHTTP(req)
30+
shoud.Equal(int64(18), pr.Offset())
31+
32+
req, _ = http.NewRequest("GET", "/?page_size=20&offset=18", nil)
33+
pr = request.NewPageRequestFromHTTP(req)
34+
shoud.Equal(int64(18), pr.Offset())
35+
shoud.Equal(uint(20), pr.PageSize)
36+
37+
req, _ = http.NewRequest("GET", "/?offset=18", nil)
38+
pr = request.NewPageRequestFromHTTP(req)
39+
shoud.Equal(int64(18), pr.Offset())
40+
shoud.Equal(uint(20), pr.PageSize)
41+
42+
}

0 commit comments

Comments
 (0)