Documentation
¶
Index ¶
- Constants
- func ApplyBooleanFilter(q *gorm.DB, column string, value string) *gorm.DB
- func ApplyFilter(q *gorm.DB, column string, value string) *gorm.DB
- func ApplyLikeSearch(q *gorm.DB, search string, condition string) *gorm.DB
- type Config
- type FilterAccessor
- type FilterResult
- type Params
- type QueryParams
- type Response
- type SearchAccessor
- type SearchQuery
- type SortBinding
- type SortOption
- type SortOrder
- type SortParams
Constants ¶
const UnknownTotal int64 = -1
UnknownTotal is the sentinel returned in TotalItems/TotalPages when SkipCount is set.
Variables ¶
This section is empty.
Functions ¶
func ApplyBooleanFilter ¶
ApplyBooleanFilter adds a WHERE clause for boolean columns. It detects comma-separated values and maps "true"/"1" to true and "false"/"0" to false.
func ApplyFilter ¶
ApplyFilter adds a WHERE clause to the GORM query. It detects comma-separated values and uses IN (?) for multiple values, or = ? for single values.
Types ¶
type Config ¶
type Config[T any] struct { SearchAccessors []SearchAccessor[T] // SortBindings order matters: the first binding is the default sort when the // requested key is empty or unknown, and serves as the tie-break for every // other binding so pagination is deterministic. SortBindings []SortBinding[T] FilterAccessors []FilterAccessor[T] }
func (Config[T]) MatchesSearchAndFilters ¶ added in v2.10.0
func (c Config[T]) MatchesSearchAndFilters(item T, params QueryParams) bool
MatchesSearchAndFilters reports whether a single item passes params' search term and filters under the config — the same predicate SearchOrderAndPaginate applies. It lets callers that decode large payloads incrementally drop non-matching items as they go instead of materializing everything first.
func (Config[T]) OrderAndPaginate ¶ added in v2.10.0
func (c Config[T]) OrderAndPaginate(items []T, params QueryParams) []T
OrderAndPaginate sorts items and slices the requested page without applying the search term or filters — for callers that already filtered while building the item list (e.g. dropping non-matches during an incremental decode) and only need ordering plus the page cut.
func (Config[T]) SearchOrderAndPaginate ¶ added in v2.10.0
func (c Config[T]) SearchOrderAndPaginate(items []T, params QueryParams) FilterResult[T]
type FilterAccessor ¶
type FilterResult ¶
type Params ¶
type Params struct {
Start int
Limit int
// SkipCount opts out of the COUNT(*) query that backs TotalItems/TotalPages.
// When true, paginated DB helpers return UnknownTotal (-1) for both fields and
// the response is suitable for infinite-scroll UIs that don't render page numbers.
// Default (false) preserves the historical behaviour for all existing callers.
SkipCount bool
}
type QueryParams ¶
type QueryParams struct {
SearchQuery
SortParams
Params
Filters map[string]string
}
func (QueryParams) PaginateSortAndMapDB ¶ added in v2.10.0
func (params QueryParams) PaginateSortAndMapDB[M any, D any](query *gorm.DB, records *[]M) ([]D, Response, error)
PaginateSortAndMapDB paginates DB records and maps them to API DTOs.
type Response ¶
type Response struct {
TotalPages int64 `json:"totalPages"`
TotalItems int64 `json:"totalItems"`
CurrentPage int `json:"currentPage"`
ItemsPerPage int `json:"itemsPerPage"`
GrandTotalItems int64 `json:"grandTotalItems,omitempty"`
}
func BuildResponse ¶ added in v2.8.0
func BuildResponse(totalCount int64, totalAvailable int64, params QueryParams) Response
BuildResponse creates a pagination Response from raw counts. Handles the special case where limit = -1 means "show all".
func PaginateAndSortDB ¶
type SearchAccessor ¶
SearchAccessor extracts a searchable string from T. Return any error to skip the field (e.g. when matching an unknown enum state).
Note: returning ("", nil) will match!
type SearchQuery ¶
type SearchQuery struct {
Search string
}
type SortBinding ¶
type SortBinding[T any] struct { Key string Fn SortOption[T] DescFn SortOption[T] }