Skip to content

Commit

Permalink
chor: remove pagination from filter
Browse files Browse the repository at this point in the history
  • Loading branch information
Mohammad96Assaf committed Feb 14, 2025
1 parent ecc4345 commit 475bab6
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 58 deletions.
2 changes: 0 additions & 2 deletions internal/entities/treecluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,4 @@ type TreeClusterFilter struct {
WateringStatus WateringStatus
Region string
Provider string
Page int32
Limit int32
}
60 changes: 15 additions & 45 deletions internal/server/http/handler/v1/treecluster/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,21 @@ func GetAllTreeClusters(svc service.TreeClusterService) fiber.Handler {
return func(c *fiber.Ctx) error {
ctx := c.Context()

filter, err := getTreeClusterParams(c)
if err != nil {
return errorhandler.HandleError(err)
statusQu := c.Query("status")
var wateringStatus domain.WateringStatus

if statusQu != "" {
var err error
wateringStatus, err = parseWateringStatus(statusQu)
if err != nil {
return service.NewError(service.BadRequest, err.Error())
}
}

filter := domain.TreeClusterFilter{
WateringStatus: wateringStatus,
Region: strings.Clone(c.Query("region")),
Provider: strings.Clone(c.Query("provider")),
}

domainData, totalCount, err := svc.GetAll(ctx, filter)
Expand All @@ -63,48 +75,6 @@ func GetAllTreeClusters(svc service.TreeClusterService) fiber.Handler {
}
}

func getTreeClusterParams(c *fiber.Ctx) (domain.TreeClusterFilter, error) {
var err error
statusQu := c.Query("status")
var wateringStatus domain.WateringStatus

if statusQu != "" {
wateringStatus, err = parseWateringStatus(statusQu)
if err != nil {
return domain.TreeClusterFilter{}, service.NewError(service.BadRequest, err.Error())
}
}

page, err := parseQueryParam(c, "page", 0)
if err != nil {
return domain.TreeClusterFilter{}, err
}

limit, err := parseQueryParam(c, "limit", 0)
if err != nil {
return domain.TreeClusterFilter{}, err
}

return domain.TreeClusterFilter{
WateringStatus: wateringStatus,
Region: strings.Clone(c.Query("region")),
Provider: strings.Clone(c.Query("provider")),
Limit: int32(limit),
Page: int32(page),
}, nil
}

func parseQueryParam(c *fiber.Ctx, param string, defaultValue int) (int, error) {
if c.Query(param) != "" {
value, err := strconv.Atoi(c.Query(param))
if err != nil {
return 0, service.NewError(service.BadRequest, "invalid "+param+" format")
}
return value, nil
}
return defaultValue, nil
}

// @Summary Get tree cluster by ID
// @Description Get tree cluster by ID
// @Id get-tree-cluster-by-id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func TestGetAllTreeCluster(t *testing.T) {
app.Get("/v1/cluster", handler)

mockClusterService.EXPECT().GetAll(
mock.Anything, entities.TreeClusterFilter{Page: 1, Limit: 1},
mock.Anything, entities.TreeClusterFilter{},
).Return(TestClusterList, int64(len(TestClusterList)), nil)

req, _ := http.NewRequestWithContext(context.Background(), http.MethodGet, "/v1/cluster?page=1&limit=1", nil)
Expand Down
10 changes: 0 additions & 10 deletions internal/storage/postgres/treecluster/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,9 @@ import (
"github.com/twpayne/go-geos"
)

type contextKey string

const (
pageKey contextKey = "page"
limitKey contextKey = "limit"
)

func (r *TreeClusterRepository) GetAll(ctx context.Context, filter entities.TreeClusterFilter) ([]*entities.TreeCluster, int64, error) {
log := logger.GetLogger(ctx)

ctx = context.WithValue(ctx, pageKey, filter.Page)
ctx = context.WithValue(ctx, limitKey, filter.Limit)

page, limit, err := pagination.GetValues(ctx)
if err != nil {
return nil, 0, r.store.MapError(err, sqlc.TreeCluster{})
Expand Down
23 changes: 23 additions & 0 deletions internal/storage/postgres/treecluster/get_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,29 @@ func TestTreeClusterRepository_GetAll(t *testing.T) {
}
})

t.Run("should return all tree clusters with provider", func(t *testing.T) {
// given
suite.ResetDB(t)
suite.InsertSeed(t, "internal/storage/postgres/seed/test/treecluster")
r := NewTreeClusterRepository(suite.Store, mappers)
expectedCluster := allTestCluster[len(allTestCluster)-1]

ctx := context.WithValue(context.Background(), "page", int32(1))
ctx = context.WithValue(ctx, "limit", int32(-1))

got, totalCount, err := r.GetAll(ctx, entities.TreeClusterFilter{Provider: "test-provider"})

// then
assert.NoError(t, err)
assert.NotNil(t, got)
assert.NotEmpty(t, got)
assert.Equal(t, totalCount, int64(1))
assert.Equal(t, expectedCluster.ID, got[0].ID)
assert.Equal(t, expectedCluster.Name, got[0].Name)
assert.Equal(t, expectedCluster.Provider, got[0].Provider)
assert.Equal(t, expectedCluster.AdditionalInfo, got[0].AdditionalInfo)
})

t.Run("should return tree clusters ordered by name limited by 2 and with an offset of 2", func(t *testing.T) {
// given
suite.ResetDB(t)
Expand Down

0 comments on commit 475bab6

Please sign in to comment.