package handler import "github.com/gin-gonic/gin" // pageParams reads limit/offset query params with the given default page size. // A limit of 0 (or negative) is treated as "return everything" so callers that // need the full filtered set (e.g. bulk actions) can pass ?limit=0. func pageParams(c *gin.Context, defLimit int) (limit, offset int) { limit = parseInt(c.Query("limit"), defLimit) if limit < 0 { limit = 0 } offset = parseInt(c.Query("offset"), 0) if offset < 0 { offset = 0 } return limit, offset } // pageSlice returns items[offset : offset+limit], clamped to the slice bounds. // limit <= 0 means "from offset to the end". Always returns a non-nil slice so // it JSON-encodes as [] rather than null. func pageSlice[T any](items []T, limit, offset int) []T { n := len(items) if offset >= n { return []T{} } end := n if limit > 0 && offset+limit < n { end = offset + limit } return items[offset:end] }