Skip to content

Repository files navigation

queryutil

A Go library that implements query parsing utilities compatible with Refine's Simple REST Data Provider (source) for filtering, sorting, and pagination.

Features

  • Filter parsing compatible with Refine's data provider spec
  • Sort handling with multiple fields and directions
  • Pagination with server/client modes
  • GORM integration helpers

Installation

go get go.lumeweb.com/queryutil

Usage

Request Parsing

JSON Input Support

// 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
}

Mixed Input Handling

// 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...)

Request Parsing

// 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())

Individual Parameter Parsing

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.

Sorting

// Parse sort parameterssorts:=query.ParseQuerySort(
r.URL.Query().Get("_sort"),
r.URL.Query().Get("_order"),
)
// Apply to GORM querydb=query.ApplySort(db, sorts)

Pagination

// 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)

Compatibility

This library implements the query parameter specification used by Refine's Simple REST Data Provider.

License

MIT License - see LICENSE file

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages