// Package pagination contains GORM pagination helpers shared by repository // implementations in the data layer. package pagination import "gorm.io/gorm" // LimitOffset normalizes a page request and applies the optional maximum page // size. A non-positive size means that no limit should be applied. func LimitOffset(page, size, maxSize int) (limit, offset int) { limit = size if maxSize > 0 && size > maxSize { limit = maxSize } if limit <= 0 { return 0, 0 } if page <= 0 { page = 1 } return limit, (page - 1) * limit } // Apply applies pagination only when the caller supplied a positive size. func Apply(db *gorm.DB, page, size, maxSize int) *gorm.DB { limit, offset := LimitOffset(page, size, maxSize) if limit == 0 { return db } return db.Offset(offset).Limit(limit) } // ApplyRequired always applies LIMIT/OFFSET, including LIMIT 0. This keeps // the existing repository contract for APIs whose page size is mandatory. func ApplyRequired(db *gorm.DB, page, size, maxSize int) *gorm.DB { limit, offset := LimitOffset(page, size, maxSize) return db.Offset(offset).Limit(limit) }