Skip to content

Commit

Permalink
add pagination
Browse files Browse the repository at this point in the history
  • Loading branch information
cyberhorsey committed Jun 20, 2023
1 parent e56b47a commit e92cdb8
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 76 deletions.
5 changes: 4 additions & 1 deletion packages/eventindexer/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import (
"context"
"database/sql"
"math/big"
"net/http"

"github.com/morkid/paginate"
"gorm.io/datatypes"
)

Expand Down Expand Up @@ -67,7 +69,8 @@ type EventRepository interface {
GetCountByAddressAndEventName(ctx context.Context, address string, event string) (int, error)
GetByAddressAndEventName(
ctx context.Context,
req *http.Request,
address string,
event string,
) ([]*Event, error)
) (paginate.Page, error)
}
12 changes: 3 additions & 9 deletions packages/eventindexer/http/get_by_address_and_event.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,18 @@ import (

"github.com/cyberhorsey/webutils"
"github.com/labstack/echo/v4"
"github.com/taikoxyz/taiko-mono/packages/eventindexer"
)

type GetByAddressAndEventNameResp struct {
Events []*eventindexer.Event `json:"events"`
}

func (srv *Server) GetByAddressAndEventName(c echo.Context) error {
events, err := srv.eventRepo.GetByAddressAndEventName(
page, err := srv.eventRepo.GetByAddressAndEventName(
c.Request().Context(),
c.Request(),
c.QueryParam("address"),
c.QueryParam("event"),
)
if err != nil {
return webutils.LogAndRenderErrors(c, http.StatusUnprocessableEntity, err)
}

return c.JSON(http.StatusOK, &GetByAddressAndEventNameResp{
Events: events,
})
return c.JSON(http.StatusOK, page)
}
4 changes: 2 additions & 2 deletions packages/eventindexer/http/get_by_address_and_event_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ func Test_GetByAddressAndEvent(t *testing.T) {
"0xhasntProposedAnything",
eventindexer.EventNameBlockProposed,
http.StatusOK,
[]string{`{"events":`},
[]string{`{"items":`},
},
{
"success",
"0x123",
eventindexer.EventNameBlockProposed,
http.StatusOK,
[]string{`{"events":`},
[]string{`{"items":`},
},
}

Expand Down
9 changes: 7 additions & 2 deletions packages/eventindexer/mock/event_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package mock
import (
"context"
"math/rand"
"net/http"

"github.com/morkid/paginate"
"github.com/taikoxyz/taiko-mono/packages/eventindexer"
"gorm.io/datatypes"
"gorm.io/gorm"
Expand Down Expand Up @@ -61,9 +63,10 @@ func (r *EventRepository) GetCountByAddressAndEventName(

func (r *EventRepository) GetByAddressAndEventName(
ctx context.Context,
req *http.Request,
address string,
event string,
) ([]*eventindexer.Event, error) {
) (paginate.Page, error) {
var events []*eventindexer.Event

for _, e := range r.events {
Expand All @@ -72,7 +75,9 @@ func (r *EventRepository) GetByAddressAndEventName(
}
}

return events, nil
return paginate.Page{
Items: events,
}, nil
}

func (r *EventRepository) FindByEventTypeAndBlockID(
Expand Down
22 changes: 14 additions & 8 deletions packages/eventindexer/repo/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package repo

import (
"context"
"net/http"

"github.com/morkid/paginate"
"github.com/pkg/errors"
"github.com/taikoxyz/taiko-mono/packages/eventindexer"
"gorm.io/datatypes"
Expand Down Expand Up @@ -115,16 +117,20 @@ func (r *EventRepository) GetCountByAddressAndEventName(

func (r *EventRepository) GetByAddressAndEventName(
ctx context.Context,
req *http.Request,
address string,
event string,
) ([]*eventindexer.Event, error) {
var events []*eventindexer.Event
) (paginate.Page, error) {
pg := paginate.New(&paginate.Config{
DefaultSize: 100,
})

if err := r.db.GormDB().
Raw("SELECT * FROM events WHERE event = ? AND address = ?", event, address).
Find(&events).Error; err != nil {
return nil, errors.Wrap(err, "r.db.Find")
}
q := r.db.GormDB().
Raw("SELECT * FROM events WHERE event = ? AND address = ?", event, address)

reqCtx := pg.With(q)

page := reqCtx.Request(req).Response(&[]eventindexer.Event{})

return events, nil
return page, nil
}
54 changes: 0 additions & 54 deletions packages/eventindexer/repo/event_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,60 +213,6 @@ func TestIntegration_Event_GetCountByAddressAndEventName(t *testing.T) {
}
}

func TestIntegration_Event_GetByAddressAndEventName(t *testing.T) {
db, close, err := testMysql(t)
assert.Equal(t, nil, err)

defer close()

eventRepo, err := NewEventRepository(db)
assert.Equal(t, nil, err)

_, err = eventRepo.Save(context.Background(), dummyProveEventOpts)

assert.Equal(t, nil, err)

_, err = eventRepo.Save(context.Background(), dummyProposeEventOpts)

assert.Equal(t, nil, err)

tests := []struct {
name string
address string
event string
wantLen int
wantErr error
}{
{
"success",
dummyProposeEventOpts.Address,
dummyProposeEventOpts.Event,
1,
nil,
},
{
"none",
"0xfake",
dummyProposeEventOpts.Event,
0,
nil,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
resp, err := eventRepo.GetByAddressAndEventName(
context.Background(),
tt.address,
tt.event,
)
spew.Dump(resp)
assert.Equal(t, tt.wantErr, err)
assert.Equal(t, tt.wantLen, len(resp))
})
}
}

func TestIntegration_Event_Delete(t *testing.T) {
db, close, err := testMysql(t)
assert.Equal(t, nil, err)
Expand Down

0 comments on commit e92cdb8

Please sign in to comment.