Skip to content

Commit

Permalink
Merge pull request #11 from celenium-io/improve/search
Browse files Browse the repository at this point in the history
Improve: search
  • Loading branch information
aopoltorzhicky authored Apr 23, 2024
2 parents d83fcca + 32a6afb commit 9747812
Show file tree
Hide file tree
Showing 23 changed files with 129 additions and 205 deletions.
88 changes: 29 additions & 59 deletions cmd/api/handler/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
package handler

import (
"encoding/hex"

"github.com/celenium-io/astria-indexer/cmd/api/handler/responses"
"github.com/celenium-io/astria-indexer/internal/storage"
"github.com/labstack/echo/v4"
Expand Down Expand Up @@ -59,69 +57,41 @@ func (s *SearchHandler) Search(c echo.Context) error {
return badRequestError(c, err)
}

if isAddress(req.Search) {
hash, err := hex.DecodeString(req.Search)
if err != nil {
return badRequestError(c, err)
}
address, err := s.address.ByHash(c.Request().Context(), hash)
if err != nil {
return internalServerError(c, err)
}
results := []responses.SearchResult{
responses.NewSearchResult(address.String(), "address", responses.NewAddress(address, nil)),
}
return returnArray(c, results)
}

if isHash(req.Search) {
hash, err := hex.DecodeString(req.Search)
if err != nil {
return badRequestError(c, err)
}
results, err := s.search.Search(c.Request().Context(), hash)
if err != nil {
return internalServerError(c, err)
}

response := make([]responses.SearchResult, len(results))
for i := range results {

var body any
switch results[i].Type {
case "block":
block, err := s.blocks.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
}
body = responses.NewBlock(*block)
case "tx":
tx, err := s.txs.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
}
body = responses.NewTx(*tx)
case "rollup":
rollup, err := s.rollups.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
}
body = responses.NewRollup(rollup)
}

response[i] = responses.NewSearchResult(results[i].Value, results[i].Type, body)
}
return returnArray(c, response)
}

results, err := s.search.SearchText(c.Request().Context(), req.Search)
results, err := s.search.Search(c.Request().Context(), req.Search)
if err != nil {
return internalServerError(c, err)
}

response := make([]responses.SearchResult, len(results))
for i := range results {

var body any
if results[i].Type == "validator" {
switch results[i].Type {
case "block":
block, err := s.blocks.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
}
body = responses.NewBlock(*block)
case "tx":
tx, err := s.txs.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
}
body = responses.NewTx(*tx)
case "rollup":
rollup, err := s.rollups.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
}
body = responses.NewRollup(rollup)
case "address":
address, err := s.address.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
}
body = responses.NewAddress(*address, nil)
case "validator":
validator, err := s.validators.GetByID(c.Request().Context(), results[i].Id)
if err != nil {
return internalServerError(c, err)
Expand Down
23 changes: 17 additions & 6 deletions cmd/api/handler/search_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,20 @@ func (s *SearchTestSuite) TestSearchAddress() {
c := s.echo.NewContext(req, rec)
c.SetPath("/search")

s.search.EXPECT().
Search(gomock.Any(), testAddressHash).
Return([]storage.SearchResult{
{
Id: testAddress.Id,
Type: "address",
Value: testAddressHash,
},
}, nil).
Times(1)

s.address.EXPECT().
ByHash(gomock.Any(), testAddress.Hash).
Return(testAddress, nil).
GetByID(gomock.Any(), uint64(1)).
Return(&testAddress, nil).
Times(1)

s.Require().NoError(s.handler.Search(c))
Expand All @@ -95,7 +106,7 @@ func (s *SearchTestSuite) TestSearchBlock() {
c.SetPath("/search")

s.search.EXPECT().
Search(gomock.Any(), testBlock.Hash).
Search(gomock.Any(), testBlockHash).
Return([]storage.SearchResult{
{
Type: "block",
Expand Down Expand Up @@ -134,7 +145,7 @@ func (s *SearchTestSuite) TestSearchTx() {
c.SetPath("/search")

s.search.EXPECT().
Search(gomock.Any(), testTx.Hash).
Search(gomock.Any(), testTxHash).
Return([]storage.SearchResult{
{
Type: "tx",
Expand Down Expand Up @@ -173,7 +184,7 @@ func (s *SearchTestSuite) TestSearchRollup() {
c.SetPath("/search")

s.search.EXPECT().
Search(gomock.Any(), testRollup.AstriaId).
Search(gomock.Any(), testRollupHash).
Return([]storage.SearchResult{
{
Type: "rollup",
Expand Down Expand Up @@ -212,7 +223,7 @@ func (s *SearchTestSuite) TestSearchValidator() {
c.SetPath("/search")

s.search.EXPECT().
SearchText(gomock.Any(), "nam").
Search(gomock.Any(), "nam").
Return([]storage.SearchResult{
{
Type: "validator",
Expand Down
3 changes: 1 addition & 2 deletions internal/storage/generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,7 @@ type SearchResult struct {

//go:generate mockgen -source=$GOFILE -destination=mock/$GOFILE -package=mock -typed
type ISearch interface {
Search(ctx context.Context, query []byte) ([]SearchResult, error)
SearchText(ctx context.Context, text string) ([]SearchResult, error)
Search(ctx context.Context, query string) ([]SearchResult, error)
}

//go:generate mockgen -source=$GOFILE -destination=mock/$GOFILE -package=mock -typed
Expand Down
3 changes: 0 additions & 3 deletions internal/storage/mock/action.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/address.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/balance.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/balance_update.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/block.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/block_signature.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/block_stats.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/constant.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 3 additions & 45 deletions internal/storage/mock/generic.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/rollup.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/state.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/stats.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/tx.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions internal/storage/mock/validator.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 9747812

Please sign in to comment.