Skip to content

Commit cf6e6bb

Browse files
authored
fix: page size ignored when a cursor is used (#914)
1 parent a8150c9 commit cf6e6bb

File tree

3 files changed

+63
-17
lines changed

3 files changed

+63
-17
lines changed

internal/api/v2/common.go

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,51 +63,63 @@ func getExpand(r *http.Request) []string {
6363
}
6464

6565
func getOffsetPaginatedQuery[v any](r *http.Request, paginationConfig common.PaginationConfig, modifiers ...func(*v) error) (*storagecommon.OffsetPaginatedQuery[v], error) {
66-
return bunpaginate.Extract[storagecommon.OffsetPaginatedQuery[v]](r, func() (*storagecommon.OffsetPaginatedQuery[v], error) {
66+
ret, err := bunpaginate.Extract[storagecommon.OffsetPaginatedQuery[v]](r, func() (*storagecommon.OffsetPaginatedQuery[v], error) {
6767
rq, err := getResourceQuery[v](r, modifiers...)
6868
if err != nil {
6969
return nil, err
7070
}
7171

72-
pageSize, err := bunpaginate.GetPageSize(
72+
return &storagecommon.OffsetPaginatedQuery[v]{
73+
Options: *rq,
74+
}, nil
75+
})
76+
if err != nil {
77+
return nil, err
78+
}
79+
80+
if ret.PageSize == 0 || r.URL.Query().Get(bunpaginate.QueryKeyPageSize) != "" {
81+
ret.PageSize, err = bunpaginate.GetPageSize(
7382
r,
7483
bunpaginate.WithMaxPageSize(paginationConfig.MaxPageSize),
7584
bunpaginate.WithDefaultPageSize(paginationConfig.DefaultPageSize),
7685
)
7786
if err != nil {
7887
return nil, err
7988
}
89+
}
8090

81-
return &storagecommon.OffsetPaginatedQuery[v]{
82-
PageSize: pageSize,
83-
Options: *rq,
84-
}, nil
85-
})
91+
return ret, nil
8692
}
8793

8894
func getColumnPaginatedQuery[v any](r *http.Request, paginationConfig common.PaginationConfig, defaultPaginationColumn string, order bunpaginate.Order, modifiers ...func(*v) error) (*storagecommon.ColumnPaginatedQuery[v], error) {
89-
return bunpaginate.Extract[storagecommon.ColumnPaginatedQuery[v]](r, func() (*storagecommon.ColumnPaginatedQuery[v], error) {
95+
ret, err := bunpaginate.Extract[storagecommon.ColumnPaginatedQuery[v]](r, func() (*storagecommon.ColumnPaginatedQuery[v], error) {
9096
rq, err := getResourceQuery[v](r, modifiers...)
9197
if err != nil {
9298
return nil, err
9399
}
94100

95-
pageSize, err := bunpaginate.GetPageSize(
101+
return &storagecommon.ColumnPaginatedQuery[v]{
102+
Column: defaultPaginationColumn,
103+
Order: pointer.For(order),
104+
Options: *rq,
105+
}, nil
106+
})
107+
if err != nil {
108+
return nil, err
109+
}
110+
111+
if ret.PageSize == 0 || r.URL.Query().Get(bunpaginate.QueryKeyPageSize) != "" {
112+
ret.PageSize, err = bunpaginate.GetPageSize(
96113
r,
97114
bunpaginate.WithMaxPageSize(paginationConfig.MaxPageSize),
98115
bunpaginate.WithDefaultPageSize(paginationConfig.DefaultPageSize),
99116
)
100117
if err != nil {
101118
return nil, err
102119
}
120+
}
103121

104-
return &storagecommon.ColumnPaginatedQuery[v]{
105-
PageSize: pageSize,
106-
Column: defaultPaginationColumn,
107-
Order: pointer.For(order),
108-
Options: *rq,
109-
}, nil
110-
})
122+
return ret, nil
111123
}
112124

113125
func getResourceQuery[v any](r *http.Request, modifiers ...func(*v) error) (*storagecommon.ResourceQuery[v], error) {

internal/api/v2/controllers_transactions_list_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ func TestTransactionsList(t *testing.T) {
151151
queryParams: url.Values{
152152
"cursor": []string{bunpaginate.EncodeCursor(storagecommon.ColumnPaginatedQuery[any]{})},
153153
},
154-
expectQuery: storagecommon.ColumnPaginatedQuery[any]{},
154+
expectQuery: storagecommon.ColumnPaginatedQuery[any]{
155+
PageSize: bunpaginate.QueryDefaultPageSize,
156+
},
155157
},
156158
{
157159
name: "using invalid cursor",

test/e2e/api_transactions_list_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,38 @@ var _ = Context("Ledger transactions list API tests", func() {
127127
Expect(rsp.V2TransactionsCursorResponse.Cursor.Data).To(Equal(expectedTxs))
128128
})
129129
})
130+
When("listing transactions using a page size of 5", func() {
131+
var (
132+
rsp *operations.V2ListTransactionsResponse
133+
err error
134+
)
135+
JustBeforeEach(func(specContext SpecContext) {
136+
rsp, err = Wait(specContext, DeferClient(testServer)).Ledger.V2.ListTransactions(
137+
ctx,
138+
operations.V2ListTransactionsRequest{
139+
Ledger: "default",
140+
PageSize: pointer.For(int64(5)),
141+
},
142+
)
143+
Expect(err).ToNot(HaveOccurred())
144+
})
145+
When("using next page with a page size of 10", func() {
146+
JustBeforeEach(func(specContext SpecContext) {
147+
rsp, err = Wait(specContext, DeferClient(testServer)).Ledger.V2.ListTransactions(
148+
ctx,
149+
operations.V2ListTransactionsRequest{
150+
Ledger: "default",
151+
Cursor: rsp.V2TransactionsCursorResponse.Cursor.Next,
152+
PageSize: pointer.For(int64(10)),
153+
},
154+
)
155+
Expect(err).ToNot(HaveOccurred())
156+
})
157+
It("Should return 10 elements", func() {
158+
Expect(rsp.V2TransactionsCursorResponse.Cursor.Data).To(HaveLen(10))
159+
})
160+
})
161+
})
130162
When(fmt.Sprintf("listing transactions using page size of %d", pageSize), func() {
131163
var (
132164
rsp *operations.V2ListTransactionsResponse

0 commit comments

Comments
 (0)