Skip to content

Commit 74a35b3

Browse files
committed
Adjusted the API and database interactions with context support
- Updated API handlers to pass context to database methods. - Refactored transaction handling to support multiple message types within a single transaction, including adjustments to the response structure. - Added favicon support to the API. - Improved OpenAPI documentation with detailed descriptions for various endpoints.
1 parent dde82a4 commit 74a35b3

12 files changed

Lines changed: 363 additions & 211 deletions

File tree

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ VERSION := $(if $(GIT_TAG),$(GIT_TAG),$(GIT_BRANCH)-$(GIT_COMMIT))
1313

1414
build:
1515
mkdir -p build
16-
go build -ldflags="-X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Commit=d5dfb79 -X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Version=release/0.4.0-d5dfb79" -o build/indexer indexer/main.go
16+
go build -ldflags="-X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Commit=$(GIT_COMMIT) -X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Version=$(VERSION)" -o build/indexer indexer/main.go
1717

1818
install:
1919
go install -ldflags="-X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Commit=$(GIT_COMMIT) -X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Version=$(VERSION)" indexer/main.go
@@ -28,12 +28,12 @@ clean:
2828
# experimental build with greentea garbage collection
2929
# use at your own risk
3030
build-experimental:
31-
GOEXPERIMENT=greenteagc go build -ldflags="-X main.Commit=$(GIT_COMMIT) -X main.Version=$(VERSION)" -o build/indexer-tea indexer/main.go
31+
GOEXPERIMENT=greenteagc go build -ldflags="-X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Commit=$(GIT_COMMIT) -X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Version=$(VERSION)" -o build/indexer-tea indexer/main.go
3232

3333
# experimental install with greentea garbage collection
3434
# use at your own risk
3535
install-experimental:
36-
cd indexer && GOEXPERIMENT=greenteagc go install ./... -ldflags="-X main.Commit=$(GIT_COMMIT) -X main.Version=$(VERSION)"
36+
cd indexer && GOEXPERIMENT=greenteagc go install ./... -ldflags="-X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Commit=$(GIT_COMMIT) -X github.com/Cogwheel-Validator/spectra-gnoland-indexer/indexer/cmd.Version=$(VERSION)"
3737

3838
########################################################
3939
# Test the indexer

api/handlers/address.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ func (h *AddressHandler) GetAddressTxs(
2020
ctx context.Context,
2121
input *humatypes.AddressGetInput,
2222
) (*humatypes.AddressGetOutput, error) {
23-
address, err := h.db.GetAddressTxs(input.Address, h.chainName, input.FromTimestamp, input.ToTimestamp)
23+
address, err := h.db.GetAddressTxs(
24+
ctx,
25+
input.Address,
26+
h.chainName,
27+
input.FromTimestamp,
28+
input.ToTimestamp,
29+
)
2430
if err != nil {
2531
return nil, huma.Error404NotFound("Address not found", err)
2632
}

api/handlers/blocks.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func NewBlocksHandler(db DatabaseHandler, chainName string) *BlocksHandler {
2323
// GetBlock retrieves a block by height
2424
func (h *BlocksHandler) GetBlock(ctx context.Context, input *humatypes.BlockGetInput) (*humatypes.BlockGetOutput, error) {
2525
// Fetch from database
26-
block, err := h.db.GetBlock(input.Height, h.chainName)
26+
block, err := h.db.GetBlock(ctx, input.Height, h.chainName)
2727
if err != nil {
2828
return nil, huma.Error404NotFound(fmt.Sprintf("Block at height %d not found", input.Height), err)
2929
}
@@ -51,7 +51,7 @@ func (h *BlocksHandler) GetFromToBlocks(
5151
if input.FromHeight > input.ToHeight {
5252
return nil, huma.Error400BadRequest("From height must be less than to height", nil)
5353
}
54-
blocks, err := h.db.GetFromToBlocks(input.FromHeight, input.ToHeight, h.chainName)
54+
blocks, err := h.db.GetFromToBlocks(ctx, input.FromHeight, input.ToHeight, h.chainName)
5555
if err != nil {
5656
return nil, huma.Error404NotFound(fmt.Sprintf("Blocks from height %d to height %d not found", input.FromHeight, input.ToHeight), err)
5757
}
@@ -76,7 +76,7 @@ func (h *BlocksHandler) GetAllBlockSigners(
7676
input *humatypes.AllBlockSignersGetInput,
7777
) (*humatypes.AllBlockSignersGetOutput, error) {
7878
// Fetch from database
79-
blockSigners, err := h.db.GetAllBlockSigners(h.chainName, input.BlockHeight)
79+
blockSigners, err := h.db.GetAllBlockSigners(ctx, h.chainName, input.BlockHeight)
8080
if err != nil {
8181
return nil, huma.Error404NotFound("Block signers not found", err)
8282
}
@@ -92,7 +92,7 @@ func (h *BlocksHandler) GetAllBlockSigners(
9292

9393
// Get latest block height
9494
func (h *BlocksHandler) GetLatestBlock(ctx context.Context, _ *humatypes.LatestBlockHeightGetInput) (*humatypes.LatestBlockHeightGetOutput, error) {
95-
block, err := h.db.GetLatestBlock(h.chainName)
95+
block, err := h.db.GetLatestBlock(ctx, h.chainName)
9696
if err != nil {
9797
return nil, huma.Error404NotFound("Latest block height not found", err)
9898
}
@@ -112,7 +112,7 @@ func (h *BlocksHandler) GetLatestBlock(ctx context.Context, _ *humatypes.LatestB
112112
// Get last x blocks
113113
func (h *BlocksHandler) GetLastXBlocks(ctx context.Context, input *humatypes.LastXBlocksGetInput) (*humatypes.LastXBlocksGetOutput, error) {
114114
// Fetch from database
115-
blocks, err := h.db.GetLastXBlocks(h.chainName, input.Amount)
115+
blocks, err := h.db.GetLastXBlocks(ctx, h.chainName, input.Amount)
116116
if err != nil {
117117
return nil, huma.Error404NotFound("Last x blocks not found", err)
118118
}

api/handlers/database_test.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package handlers_test
22

33
import (
4+
"context"
45
"fmt"
56
"time"
67

@@ -18,13 +19,13 @@ type MockDatabase struct {
1819
msgCall map[string]*database.MsgCall
1920
msgAddPackage map[string]*database.MsgAddPackage
2021
msgRun map[string]*database.MsgRun
21-
msgTypes map[string]string
22+
msgTypes map[string][]string
2223

2324
shouldError bool
2425
errorMsg string
2526
}
2627

27-
func (m *MockDatabase) GetBlock(height uint64, chainName string) (*database.BlockData, error) {
28+
func (m *MockDatabase) GetBlock(ctx context.Context, height uint64, chainName string) (*database.BlockData, error) {
2829
if m.shouldError {
2930
return nil, fmt.Errorf("%s", m.errorMsg)
3031
}
@@ -35,7 +36,7 @@ func (m *MockDatabase) GetBlock(height uint64, chainName string) (*database.Bloc
3536
return block, nil
3637
}
3738

38-
func (m *MockDatabase) GetFromToBlocks(fromHeight uint64, toHeight uint64, chainName string) ([]*database.BlockData, error) {
39+
func (m *MockDatabase) GetFromToBlocks(ctx context.Context, fromHeight uint64, toHeight uint64, chainName string) ([]*database.BlockData, error) {
3940
if m.shouldError {
4041
return nil, fmt.Errorf("%s", m.errorMsg)
4142
}
@@ -50,7 +51,7 @@ func (m *MockDatabase) GetFromToBlocks(fromHeight uint64, toHeight uint64, chain
5051
return result, nil
5152
}
5253

53-
func (m *MockDatabase) GetAllBlockSigners(chainName string, blockHeight uint64) (*database.BlockSigners, error) {
54+
func (m *MockDatabase) GetAllBlockSigners(ctx context.Context, chainName string, blockHeight uint64) (*database.BlockSigners, error) {
5455
if m.shouldError {
5556
return nil, fmt.Errorf("%s", m.errorMsg)
5657
}
@@ -61,7 +62,7 @@ func (m *MockDatabase) GetAllBlockSigners(chainName string, blockHeight uint64)
6162
return blockSigners, nil
6263
}
6364

64-
func (m *MockDatabase) GetTransaction(txHash string, chainName string) (*database.Transaction, error) {
65+
func (m *MockDatabase) GetTransaction(ctx context.Context, txHash string, chainName string) (*database.Transaction, error) {
6566
if m.shouldError {
6667
return nil, fmt.Errorf("%s", m.errorMsg)
6768
}
@@ -72,7 +73,7 @@ func (m *MockDatabase) GetTransaction(txHash string, chainName string) (*databas
7273
return transaction, nil
7374
}
7475

75-
func (m *MockDatabase) GetAddressTxs(address string, chainName string, fromTimestamp time.Time, toTimestamp time.Time) (*[]database.AddressTx, error) {
76+
func (m *MockDatabase) GetAddressTxs(ctx context.Context, address string, chainName string, fromTimestamp time.Time, toTimestamp time.Time) (*[]database.AddressTx, error) {
7677
if m.shouldError {
7778
return nil, fmt.Errorf("%s", m.errorMsg)
7879
}
@@ -83,7 +84,7 @@ func (m *MockDatabase) GetAddressTxs(address string, chainName string, fromTimes
8384
return addressTxs, nil
8485
}
8586

86-
func (m *MockDatabase) GetLatestBlock(chainName string) (*database.BlockData, error) {
87+
func (m *MockDatabase) GetLatestBlock(ctx context.Context, chainName string) (*database.BlockData, error) {
8788
if m.shouldError {
8889
return nil, fmt.Errorf("%s", m.errorMsg)
8990
}
@@ -93,7 +94,7 @@ func (m *MockDatabase) GetLatestBlock(chainName string) (*database.BlockData, er
9394
return m.latestBlock, nil
9495
}
9596

96-
func (m *MockDatabase) GetLastXBlocks(chainName string, x uint64) ([]*database.BlockData, error) {
97+
func (m *MockDatabase) GetLastXBlocks(ctx context.Context, chainName string, x uint64) ([]*database.BlockData, error) {
9798
if m.shouldError {
9899
return nil, fmt.Errorf("%s", m.errorMsg)
99100
}
@@ -104,7 +105,7 @@ func (m *MockDatabase) GetLastXBlocks(chainName string, x uint64) ([]*database.B
104105
return blocks, nil
105106
}
106107

107-
func (m *MockDatabase) GetLastXTransactions(chainName string, x uint64) ([]*database.Transaction, error) {
108+
func (m *MockDatabase) GetLastXTransactions(ctx context.Context, chainName string, x uint64) ([]*database.Transaction, error) {
108109
if m.shouldError {
109110
return nil, fmt.Errorf("%s", m.errorMsg)
110111
}
@@ -115,57 +116,57 @@ func (m *MockDatabase) GetLastXTransactions(chainName string, x uint64) ([]*data
115116
return transactions, nil
116117
}
117118

118-
func (m *MockDatabase) GetMsgType(txHash string, chainName string) (string, error) {
119+
func (m *MockDatabase) GetMsgTypes(ctx context.Context, txHash string, chainName string) ([]string, error) {
119120
if m.shouldError {
120-
return "", fmt.Errorf("%s", m.errorMsg)
121+
return nil, fmt.Errorf("%s", m.errorMsg)
121122
}
122-
msgType, ok := m.msgTypes[txHash]
123+
msgTypes, ok := m.msgTypes[txHash]
123124
if !ok {
124-
return "", fmt.Errorf("message type not found")
125+
return nil, fmt.Errorf("message type not found")
125126
}
126-
return msgType, nil
127+
return msgTypes, nil
127128
}
128129

129-
func (m *MockDatabase) GetBankSend(txHash string, chainName string) (*database.BankSend, error) {
130+
func (m *MockDatabase) GetBankSend(ctx context.Context, txHash string, chainName string) ([]*database.BankSend, error) {
130131
if m.shouldError {
131132
return nil, fmt.Errorf("%s", m.errorMsg)
132133
}
133134
bankSend, ok := m.bankSend[txHash]
134135
if !ok {
135136
return nil, fmt.Errorf("bank send not found")
136137
}
137-
return bankSend, nil
138+
return []*database.BankSend{bankSend}, nil
138139
}
139140

140-
func (m *MockDatabase) GetMsgCall(txHash string, chainName string) (*database.MsgCall, error) {
141+
func (m *MockDatabase) GetMsgCall(ctx context.Context, txHash string, chainName string) ([]*database.MsgCall, error) {
141142
if m.shouldError {
142143
return nil, fmt.Errorf("%s", m.errorMsg)
143144
}
144145
msgCall, ok := m.msgCall[txHash]
145146
if !ok {
146147
return nil, fmt.Errorf("message call not found")
147148
}
148-
return msgCall, nil
149+
return []*database.MsgCall{msgCall}, nil
149150
}
150151

151-
func (m *MockDatabase) GetMsgAddPackage(txHash string, chainName string) (*database.MsgAddPackage, error) {
152+
func (m *MockDatabase) GetMsgAddPackage(ctx context.Context, txHash string, chainName string) ([]*database.MsgAddPackage, error) {
152153
if m.shouldError {
153154
return nil, fmt.Errorf("%s", m.errorMsg)
154155
}
155156
msgAddPackage, ok := m.msgAddPackage[txHash]
156157
if !ok {
157158
return nil, fmt.Errorf("message add package not found")
158159
}
159-
return msgAddPackage, nil
160+
return []*database.MsgAddPackage{msgAddPackage}, nil
160161
}
161162

162-
func (m *MockDatabase) GetMsgRun(txHash string, chainName string) (*database.MsgRun, error) {
163+
func (m *MockDatabase) GetMsgRun(ctx context.Context, txHash string, chainName string) ([]*database.MsgRun, error) {
163164
if m.shouldError {
164165
return nil, fmt.Errorf("%s", m.errorMsg)
165166
}
166167
msgRun, ok := m.msgRun[txHash]
167168
if !ok {
168169
return nil, fmt.Errorf("message run not found")
169170
}
170-
return msgRun, nil
171+
return []*database.MsgRun{msgRun}, nil
171172
}

api/handlers/interface.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package handlers
22

33
import (
4+
"context"
45
"time"
56

67
"github.com/Cogwheel-Validator/spectra-gnoland-indexer/pkgs/database"
@@ -9,21 +10,21 @@ import (
910
// DatabaseHandler interface for the database
1011
type DatabaseHandler interface {
1112
// Addresses
12-
GetAddressTxs(address string, chainName string, fromTimestamp time.Time, toTimestamp time.Time) (*[]database.AddressTx, error)
13+
GetAddressTxs(ctx context.Context, address string, chainName string, fromTimestamp time.Time, toTimestamp time.Time) (*[]database.AddressTx, error)
1314

1415
// Blocks
15-
GetBlock(height uint64, chainName string) (*database.BlockData, error)
16-
GetFromToBlocks(fromHeight uint64, toHeight uint64, chainName string) ([]*database.BlockData, error)
17-
GetAllBlockSigners(chainName string, blockHeight uint64) (*database.BlockSigners, error)
18-
GetLatestBlock(chainName string) (*database.BlockData, error)
19-
GetLastXBlocks(chainName string, x uint64) ([]*database.BlockData, error)
16+
GetBlock(ctx context.Context, height uint64, chainName string) (*database.BlockData, error)
17+
GetFromToBlocks(ctx context.Context, fromHeight uint64, toHeight uint64, chainName string) ([]*database.BlockData, error)
18+
GetAllBlockSigners(ctx context.Context, chainName string, blockHeight uint64) (*database.BlockSigners, error)
19+
GetLatestBlock(ctx context.Context, chainName string) (*database.BlockData, error)
20+
GetLastXBlocks(ctx context.Context, chainName string, x uint64) ([]*database.BlockData, error)
2021

2122
// Transactions
22-
GetTransaction(txHash string, chainName string) (*database.Transaction, error)
23-
GetLastXTransactions(chainName string, x uint64) ([]*database.Transaction, error)
24-
GetMsgType(txHash string, chainName string) (string, error)
25-
GetBankSend(txHash string, chainName string) (*database.BankSend, error)
26-
GetMsgCall(txHash string, chainName string) (*database.MsgCall, error)
27-
GetMsgAddPackage(txHash string, chainName string) (*database.MsgAddPackage, error)
28-
GetMsgRun(txHash string, chainName string) (*database.MsgRun, error)
23+
GetTransaction(ctx context.Context, txHash string, chainName string) (*database.Transaction, error)
24+
GetLastXTransactions(ctx context.Context, chainName string, x uint64) ([]*database.Transaction, error)
25+
GetMsgTypes(ctx context.Context, txHash string, chainName string) ([]string, error)
26+
GetBankSend(ctx context.Context, txHash string, chainName string) ([]*database.BankSend, error)
27+
GetMsgCall(ctx context.Context, txHash string, chainName string) ([]*database.MsgCall, error)
28+
GetMsgAddPackage(ctx context.Context, txHash string, chainName string) ([]*database.MsgAddPackage, error)
29+
GetMsgRun(ctx context.Context, txHash string, chainName string) ([]*database.MsgRun, error)
2930
}

0 commit comments

Comments
 (0)