diff --git a/.gitignore b/.gitignore index 690dfe0..22ef916 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ *.log *.out *.http -.DS_Store \ No newline at end of file +.DS_Store +treehole_next diff --git a/apis/floor/apis.go b/apis/floor/apis.go index ec19f41..302df15 100644 --- a/apis/floor/apis.go +++ b/apis/floor/apis.go @@ -34,6 +34,10 @@ func ListFloorsInAHole(c *fiber.Ctx) error { return err } + // Check raw query parameters before validation applies defaults + rawSize := c.Query("size") + rawOffset := c.Query("offset") + var query ListModel err = common.ValidateQuery(c, &query) if err != nil { @@ -43,9 +47,20 @@ func ListFloorsInAHole(c *fiber.Ctx) error { // get floors var floors Floors // use ranking field to locate faster - querySet, err := floors.MakeQuerySet(&holeID, &query.Offset, &query.Size, c) - if err != nil { - return err + var querySet *gorm.DB + // Special case: if both size and offset are explicitly set to 0, return all floors + // This matches the behavior of ListFloorsOld for backward compatibility + // When validation applies defaults, size=0 becomes size=30, so we check raw query params + if rawSize == "0" && rawOffset == "0" { + querySet, err = floors.MakeQuerySet(&holeID, nil, nil, c) + if err != nil { + return err + } + } else { + querySet, err = floors.MakeQuerySet(&holeID, &query.Offset, &query.Size, c) + if err != nil { + return err + } } result := querySet.Order(query.OrderBy + " " + query.Sort). Find(&floors) diff --git a/tests/floor_test.go b/tests/floor_test.go index d966766..bd25d24 100644 --- a/tests/floor_test.go +++ b/tests/floor_test.go @@ -40,6 +40,15 @@ func TestListFloorsInAHole(t *testing.T) { if len(floors) != 0 { assert.EqualValues(t, strings.Repeat("1", offset+1), floors[0].Content) } + + // size=0 and offset=0 should return all floors + // The first test hole has 50 floors (see initTestFloors in tests/init.go) + data = Map{"size": 0, "offset": 0} + testAPIModelWithQuery(t, "get", "/api/holes/"+strconv.Itoa(hole.ID)+"/floors", 200, &floors, data) + assert.EqualValues(t, 50, len(floors)) + if len(floors) != 0 { + assert.EqualValues(t, "1", floors[0].Content) + } } func TestListFloorsOld(t *testing.T) {