A Go library that implements query parsing utilities compatible with Refine's Simple REST Data Provider (source) for filtering, sorting, and pagination.
- Filter parsing compatible with Refine's data provider spec
- Sort handling with multiple fields and directions
- Pagination with server/client modes
- GORM integration helpers
go get go.lumeweb.com/queryutil// Parse filters from JSON stringjsonFilters:=`[ { "field": "name", "operator": "contains", "value": "john" }, { "operator": "or", "value": [ { "field": "age", "operator": "gte", "value": 30 } ] }]`filters, _, _, err:=queryutil.ParseRequestFromJSON(jsonFilters)
iferr!=nil {
// Handle error
}// If using both parameter and JSON parsing:paramsFilters, paramSorts, pagination, err:=queryutil.ParseRequest(r)
jsonFilters, _, _, err:=queryutil.ParseRequestFromJSON(body)
// Merge filter setsallFilters:=append(paramsFilters, jsonFilters...)// Parse all query parameters from requestfilters, sorts, pagination, err:=queryutil.ParseRequest(r)
iferr!=nil {
// Handle error
}
// Apply to GORM querydb=queryutil.ApplyFilters(db, filters)
db=queryutil.ApplySort(db, sorts)
db=db.Offset(pagination.GetOffset()).Limit(pagination.GetLimit())With global search support:
// Configure searchable columnssearchConfig:=&queryutil.GlobalSearchConfig{
SearchableColumns: []string{"name", "email", "description"},
}
// Parse request with search configfilters, sorts, pagination, err:=queryutil.ParseRequestWithSearch(r, searchConfig)
iferr!=nil {
// Handle error
}
// Apply to GORM query - pass searchConfig for global search supportdb=queryutil.ApplyFilters(db, filters, searchConfig)
db=queryutil.ApplySort(db, sorts)
db=db.Offset(pagination.GetOffset()).Limit(pagination.GetLimit())You can also parse parameters individually if needed:
// Parse filtersfilters, err:=query.ParseQueryFilters(r.URL.Query())
iferr!=nil {
// Handle error
}
// Parse sortsorts:=query.ParseQuerySort(r.URL.Query())
// Parse paginationpagination:=query.ParseQueryPagination(r.URL.Query())Supported operators:
- Default (no suffix): Exact match
_ne: Not equals_gte: Greater than or equal_lte: Less than or equal_like: Contains search
Special parameter q is reserved for global search.
// Parse sort parameterssorts:=query.ParseQuerySort(
r.URL.Query().Get("_sort"),
r.URL.Query().Get("_order"),
)
// Apply to GORM querydb=query.ApplySort(db, sorts)// Parse pagination parameterspagination:=query.ParseQueryPagination(r.URL.Query())
// Get SQL LIMIT/OFFSETlimit:=pagination.GetLimit()
offset:=pagination.GetOffset()
// Apply to GORM querydb=db.Offset(offset).Limit(limit)This library implements the query parameter specification used by Refine's Simple REST Data Provider.
MIT License - see LICENSE file