Skip to content

Commit e6fe782

Browse files
Merge pull request #91 from kaleido-io/expose-filters
Expose filters for rich query
2 parents 7b4c815 + 2175fff commit e6fe782

13 files changed

+122
-14
lines changed

internal/persistence/persistence.go

+6
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@ type RichQuery interface {
145145
ListTransactionConfirmations(ctx context.Context, txID string, filter ffapi.AndFilter) ([]*apitypes.ConfirmationRecord, *ffapi.FilterResult, error)
146146
ListTransactionHistory(ctx context.Context, txID string, filter ffapi.AndFilter) ([]*apitypes.TXHistoryRecord, *ffapi.FilterResult, error)
147147
ListStreamListeners(ctx context.Context, streamID *fftypes.UUID, filter ffapi.AndFilter) ([]*apitypes.Listener, *ffapi.FilterResult, error)
148+
149+
NewStreamFilter(ctx context.Context) ffapi.FilterBuilder
150+
NewListenerFilter(ctx context.Context) ffapi.FilterBuilder
151+
NewTransactionFilter(ctx context.Context) ffapi.FilterBuilder
152+
NewConfirmationFilter(ctx context.Context) ffapi.FilterBuilder
153+
NewTxHistoryFilter(ctx context.Context) ffapi.FilterBuilder
148154
}
149155

150156
type CheckpointPersistence interface {

internal/persistence/postgres/confirmations.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,14 @@ func (p *sqlPersistence) newConfirmationsCollection() *dbsql.CrudBase[*apitypes.
7777
return collection
7878
}
7979

80+
func (p *sqlPersistence) NewConfirmationFilter(ctx context.Context) ffapi.FilterBuilder {
81+
return persistence.ConfirmationFilters.NewFilter(ctx)
82+
}
83+
84+
func (p *sqlPersistence) ListTransactionConfirmations(ctx context.Context, txID string, filter ffapi.AndFilter) ([]*apitypes.ConfirmationRecord, *ffapi.FilterResult, error) {
85+
return p.confirmations.GetMany(ctx, filter.Condition(filter.Builder().Eq("transaction", txID)))
86+
}
87+
8088
func (p *sqlPersistence) GetTransactionConfirmations(ctx context.Context, txID string) ([]*apitypes.Confirmation, error) {
8189
// We query in increasing insertion order
8290
filter := persistence.ConfirmationFilters.NewFilter(ctx).Eq("transaction", txID).Sort("sequence").Ascending()
@@ -110,7 +118,3 @@ func (p *sqlPersistence) AddTransactionConfirmations(ctx context.Context, txID s
110118
}
111119
return nil // we do this async for performance
112120
}
113-
114-
func (p *sqlPersistence) ListTransactionConfirmations(ctx context.Context, txID string, filter ffapi.AndFilter) ([]*apitypes.ConfirmationRecord, *ffapi.FilterResult, error) {
115-
return p.confirmations.GetMany(ctx, filter.Condition(filter.Builder().Eq("transaction", txID)))
116-
}

internal/persistence/postgres/confirmations_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323

2424
"github.com/hyperledger/firefly-common/pkg/config"
2525
"github.com/hyperledger/firefly-common/pkg/fftypes"
26-
"github.com/hyperledger/firefly-transaction-manager/internal/persistence"
2726
"github.com/hyperledger/firefly-transaction-manager/pkg/apitypes"
2827
"github.com/hyperledger/firefly-transaction-manager/pkg/ffcapi"
2928
"github.com/sirupsen/logrus"
@@ -162,7 +161,7 @@ func TestTransactionConfirmationsOrderPSQL(t *testing.T) {
162161
}, confirmations)
163162

164163
// Filter just one
165-
fb := persistence.ConfirmationFilters.NewFilter(ctx)
164+
fb := p.NewConfirmationFilter(ctx)
166165
crs, _, err := p.ListTransactionConfirmations(ctx, tx2ID, fb.And(fb.Eq("blocknumber", 1)))
167166
assert.Len(t, crs, 1)
168167
assert.Equal(t, crs[0].BlockNumber.Uint64(), uint64(1))

internal/persistence/postgres/eventstreams.go

+4
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ func (p *sqlPersistence) newEventStreamsCollection() *dbsql.CrudBase[*apitypes.E
9494
return collection
9595
}
9696

97+
func (p *sqlPersistence) NewStreamFilter(ctx context.Context) ffapi.FilterBuilder {
98+
return persistence.EventStreamFilters.NewFilter(ctx)
99+
}
100+
97101
func (p *sqlPersistence) ListStreams(ctx context.Context, filter ffapi.AndFilter) ([]*apitypes.EventStream, *ffapi.FilterResult, error) {
98102
return p.eventStreams.GetMany(ctx, filter)
99103
}

internal/persistence/postgres/eventstreams_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func TestEventStreamAfterPaginatePSQL(t *testing.T) {
157157
assert.Regexp(t, "FF00164", err)
158158

159159
// Find just one
160-
fb := persistence.EventStreamFilters.NewFilter(ctx)
160+
fb := p.NewStreamFilter(ctx)
161161
list4, _, err := p.ListStreams(ctx, fb.And(fb.Eq("name", *eventStreams[15].Name)))
162162
assert.NoError(t, err)
163163
assert.Len(t, list4, 1)

internal/persistence/postgres/listeners.go

+4
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ func (p *sqlPersistence) newListenersCollection() *dbsql.CrudBase[*apitypes.List
7676
return collection
7777
}
7878

79+
func (p *sqlPersistence) NewListenerFilter(ctx context.Context) ffapi.FilterBuilder {
80+
return persistence.ListenerFilters.NewFilter(ctx)
81+
}
82+
7983
func (p *sqlPersistence) ListListeners(ctx context.Context, filter ffapi.AndFilter) ([]*apitypes.Listener, *ffapi.FilterResult, error) {
8084
return p.listeners.GetMany(ctx, filter)
8185
}

internal/persistence/postgres/listeners_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,14 @@ func TestListenerAfterPaginatePSQL(t *testing.T) {
159159
assert.Regexp(t, "FF00164", err)
160160

161161
// Find just one
162-
fb := persistence.ListenerFilters.NewFilter(ctx)
162+
fb := p.NewListenerFilter(ctx)
163163
list4, _, err := p.ListListeners(ctx, fb.And(fb.Eq("name", *listeners[15].Name)))
164164
assert.NoError(t, err)
165165
assert.Len(t, list4, 1)
166166
assert.Equal(t, *listeners[15].Name, *list4[0].Name)
167167

168168
// Check search is scoped
169-
fb = persistence.ListenerFilters.NewFilter(ctx)
169+
fb = p.NewListenerFilter(ctx)
170170
list5, _, err := p.ListStreamListeners(ctx, stream1, fb.And(fb.Eq("name", *listeners[15].Name)))
171171
assert.NoError(t, err)
172172
assert.Empty(t, list5)

internal/persistence/postgres/transactions.go

+4
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ func (p *sqlPersistence) newTransactionCollection() *dbsql.CrudBase[*apitypes.Ma
114114
return collection
115115
}
116116

117+
func (p *sqlPersistence) NewTransactionFilter(ctx context.Context) ffapi.FilterBuilder {
118+
return persistence.TransactionFilters.NewFilter(ctx)
119+
}
120+
117121
func (p *sqlPersistence) ListTransactions(ctx context.Context, filter ffapi.AndFilter) ([]*apitypes.ManagedTX, *ffapi.FilterResult, error) {
118122
return p.transactions.GetMany(ctx, filter)
119123
}

internal/persistence/postgres/transactions_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,10 @@ func TestTransactionListByCreateTimePSQL(t *testing.T) {
257257
txs = append(txs, tx)
258258
}
259259

260+
fb := p.NewTransactionFilter(ctx)
261+
260262
// List all the transactions - default is created time descending on the standard filter
261-
list1, _, err := p.ListTransactions(ctx, persistence.TransactionFilters.NewFilter(ctx).And())
263+
list1, _, err := p.ListTransactions(ctx, fb.And())
262264
assert.NoError(t, err)
263265
assert.Len(t, list1, 10)
264266
for i := 0; i < 10; i++ {

internal/persistence/postgres/txhistory.go

+4
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ func (p *sqlPersistence) newTXHistoryCollection() *dbsql.CrudBase[*apitypes.TXHi
8787
return collection
8888
}
8989

90+
func (p *sqlPersistence) NewTxHistoryFilter(ctx context.Context) ffapi.FilterBuilder {
91+
return persistence.TXHistoryFilters.NewFilter(ctx)
92+
}
93+
9094
func (p *sqlPersistence) ListTransactionHistory(ctx context.Context, txID string, filter ffapi.AndFilter) ([]*apitypes.TXHistoryRecord, *ffapi.FilterResult, error) {
9195
return p.txHistory.GetMany(ctx, filter.Condition(filter.Builder().Eq("transaction", txID)))
9296
}

internal/persistence/postgres/txhistory_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"github.com/DATA-DOG/go-sqlmock"
2626
"github.com/hyperledger/firefly-common/pkg/config"
2727
"github.com/hyperledger/firefly-common/pkg/fftypes"
28-
"github.com/hyperledger/firefly-transaction-manager/internal/persistence"
2928
"github.com/hyperledger/firefly-transaction-manager/pkg/apitypes"
3029
"github.com/hyperledger/firefly-transaction-manager/pkg/ffcapi"
3130
"github.com/sirupsen/logrus"
@@ -106,7 +105,8 @@ func TestTXHistoryCompressionPSQL(t *testing.T) {
106105
assert.NoError(t, err)
107106

108107
// Get the history
109-
history, _, err := p.ListTransactionHistory(ctx, txID, persistence.TXHistoryFilters.NewFilter(ctx).And())
108+
fb := p.NewTxHistoryFilter(ctx)
109+
history, _, err := p.ListTransactionHistory(ctx, txID, fb.And())
110110
assert.NoError(t, err)
111111
// Time strip the history for compare
112112
for _, h := range history {

mocks/persistencemocks/rich_query.go

+80
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/fftm/transaction_events_handler.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,18 @@ func (eh *ManagedTransactionEventHandler) HandleEvent(_ context.Context, e apity
5353
case apitypes.ManagedTXDeleted:
5454
eh.sendWSReply(e.Tx, nil /* receipt never sent with delete */)
5555
case apitypes.ManagedTXTransactionHashAdded:
56+
txID := e.Tx.ID
5657
return eh.ConfirmationManager.Notify(&confirmations.Notification{
5758
NotificationType: confirmations.NewTransaction,
5859
Transaction: &confirmations.TransactionInfo{
5960
TransactionHash: e.Tx.TransactionHash,
6061
Receipt: func(ctx context.Context, receipt *ffcapi.TransactionReceiptResponse) {
61-
if err := eh.TxHandler.HandleTransactionReceiptReceived(ctx, e.Tx.ID, receipt); err != nil {
62+
if err := eh.TxHandler.HandleTransactionReceiptReceived(ctx, txID, receipt); err != nil {
6263
log.L(ctx).Errorf("Receipt for transaction %s at nonce %s / %d - hash: %s was not handled due to %s", e.Tx.ID, e.Tx.TransactionHeaders.From, e.Tx.Nonce.Int64(), e.Tx.TransactionHash, err.Error())
6364
}
6465
},
6566
Confirmations: func(ctx context.Context, notification *apitypes.ConfirmationsNotification) {
66-
if err := eh.TxHandler.HandleTransactionConfirmations(ctx, e.Tx.ID, notification); err != nil {
67+
if err := eh.TxHandler.HandleTransactionConfirmations(ctx, txID, notification); err != nil {
6768
log.L(ctx).Errorf("Confirmation for transaction %s at nonce %s / %d - hash: %s was not handled due to %s", e.Tx.ID, e.Tx.TransactionHeaders.From, e.Tx.Nonce.Int64(), e.Tx.TransactionHash, err.Error())
6869
}
6970
},

0 commit comments

Comments
 (0)