Skip to content

Commit 65e221a

Browse files
committed
fix: reverse query param on transactions list
1 parent 5eac9b4 commit 65e221a

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

internal/api/v2/controllers_transactions_list.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ func listTransactions(paginationConfig common.PaginationConfig) http.HandlerFunc
1818
paginationColumn = "timestamp"
1919
}
2020

21-
rq, err := getColumnPaginatedQuery[any](r, paginationConfig, paginationColumn, bunpaginate.OrderDesc)
21+
order := bunpaginate.Order(bunpaginate.OrderDesc)
22+
if api.QueryParamBool(r, "reverse") {
23+
order = bunpaginate.OrderAsc
24+
}
25+
26+
rq, err := getColumnPaginatedQuery[any](r, paginationConfig, paginationColumn, order)
2227
if err != nil {
2328
api.BadRequest(w, common.ErrValidation, err)
2429
return

pkg/client/.speakeasy/gen.lock

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
lockVersion: 2.0.0
22
id: a9ac79e1-e429-4ee3-96c4-ec973f19bec3
33
management:
4-
docChecksum: 2d8f4181402576bb8ac4f4ce71d6e596
5-
docVersion: v2
4+
docChecksum: 00a81254f175054ea801e080fe20f368
5+
docVersion: v1
66
speakeasyVersion: 1.517.3
77
generationVersion: 2.548.6
8-
releaseVersion: 0.8.0
9-
configChecksum: 1e3419c5398b20fa22be24c9c224d2dc
8+
releaseVersion: 0.10.0
9+
configChecksum: c9179278f298050305024f57220c7da8
1010
features:
1111
go:
1212
additionalDependencies: 0.1.0
@@ -717,10 +717,10 @@ examples:
717717
atomic: true
718718
parallel: true
719719
requestBody:
720-
application/json: [{"action": "<value>", "data": {"postings": [{"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}, {"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}, {"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}], "script": {"plain": "vars {\naccount $user\n}\nsend [COIN 10] (\n\tsource = @world\n\tdestination = $user\n)\n", "vars": {"user": "users:042"}}, "reference": "ref:001", "metadata": {"admin": "true"}, "accountMetadata": {"key": {"admin": "true"}}}}]
720+
application/json: [{"action": "<value>", "data": {"postings": [{"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}, {"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}, {"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}], "script": {"plain": "vars {\naccount $user\n}\nsend [COIN 10] (\n\tsource = @world\n\tdestination = $user\n)\n", "vars": {"user": "users:042"}}, "reference": "ref:001", "metadata": {"admin": "true"}}}]
721721
responses:
722722
"200":
723-
application/json: {"data": [{"responseType": "<value>", "logID": 642842, "data": {"timestamp": "2023-05-07T17:50:11.166Z", "postings": [{"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}, {"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}], "reference": "ref:001", "metadata": {"admin": "true"}, "id": 860718, "reverted": true, "preCommitVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}, "postCommitVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}, "preCommitEffectiveVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}, "postCommitEffectiveVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}}}], "errorCode": "VALIDATION", "errorMessage": "[VALIDATION] invalid 'cursor' query param"}
723+
application/json: {"data": [{"responseType": "<value>", "logID": 53724}], "errorCode": "VALIDATION", "errorMessage": "[VALIDATION] invalid 'cursor' query param"}
724724
"400":
725725
application/json: {"data": [], "errorCode": "VALIDATION", "errorMessage": "[VALIDATION] invalid 'cursor' query param"}
726726
default:
@@ -833,7 +833,7 @@ examples:
833833
force: true
834834
header: {}
835835
requestBody:
836-
application/json: {"postings": [{"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}, {"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}], "script": {"plain": "vars {\naccount $user\n}\nsend [COIN 10] (\n\tsource = @world\n\tdestination = $user\n)\n", "vars": {"user": "users:042"}}, "reference": "ref:001", "metadata": {"admin": "true"}, "accountMetadata": {"key": {"admin": "true"}, "key1": {"admin": "true"}}}
836+
application/json: {"postings": [{"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}, {"amount": 100, "asset": "COIN", "destination": "users:002", "source": "users:001"}], "script": {"plain": "vars {\naccount $user\n}\nsend [COIN 10] (\n\tsource = @world\n\tdestination = $user\n)\n", "vars": {"user": "users:042"}}, "reference": "ref:001", "metadata": {"admin": "true"}}
837837
responses:
838838
"200":
839839
application/json: {"data": {"timestamp": "2023-02-04T12:27:33.271Z", "postings": [], "reference": "ref:001", "metadata": {"admin": "true"}, "id": 979078, "reverted": false, "preCommitVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}, "postCommitVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}, "preCommitEffectiveVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}, "postCommitEffectiveVolumes": {"orders:1": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}, "orders:2": {"USD": {"input": 100, "output": 20, "balance": 80}, "EUR": {"input": 100, "output": 20, "balance": 80}}}}}

test/e2e/api_transactions_list_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
. "github.com/onsi/ginkgo/v2"
1717
. "github.com/onsi/gomega"
1818
"math/big"
19+
"slices"
1920
"sort"
2021
"time"
2122

@@ -99,6 +100,30 @@ var _ = Context("Ledger transactions list API tests", func() {
99100
AfterEach(func() {
100101
transactions = nil
101102
})
103+
When("listing transaction using reverse option", func() {
104+
var (
105+
rsp *components.V2TransactionsCursorResponseCursor
106+
err error
107+
)
108+
JustBeforeEach(func(specContext SpecContext) {
109+
rsp, err = ListTransactions(
110+
ctx,
111+
testServer.GetValue(),
112+
operations.V2ListTransactionsRequest{
113+
Ledger: "default",
114+
PageSize: pointer.For(pageSize),
115+
Expand: pointer.For("volumes,effectiveVolumes"),
116+
Reverse: pointer.For(true),
117+
},
118+
)
119+
Expect(err).ToNot(HaveOccurred())
120+
})
121+
It("Should be ok", func() {
122+
expectedTxs := transactions[pageSize:]
123+
slices.Reverse(expectedTxs)
124+
Expect(rsp.Data).To(Equal(expectedTxs))
125+
})
126+
})
102127
When(fmt.Sprintf("listing transactions using page size of %d", pageSize), func() {
103128
var (
104129
rsp *components.V2TransactionsCursorResponseCursor

0 commit comments

Comments
 (0)