Documentation
¶
Overview ¶
Package query is the search Query DSL — filter operators, sort expressions, sparse fieldsets, includes, and pagination styles — shared by every REST + gRPC list endpoint in go/kit.
Index ¶
- Constants
- Variables
- func AddFilter(q Query, operator filter.Operator, name string, val any)
- func AddFilterParam(queryParams url.Values, fieldName string, operator filter.Operator, ...)
- func DoesInclude(q Query, relationship string) bool
- func EncodeCursor(createdAt time.Time, id string, params map[string]string) string
- func FiltersToURLValues(filters Filters[any]) url.Values
- func FormatNextURL[R resource.Resource](ctx context.Context, r []R, req protoreflect.ProtoMessage) (nextUrl string)
- func GetFilterSingleOrArrayVal[T any](fName string, filters Filters[any]) []T
- func GetFilterVal[T any](fName string, filters Filters[any]) T
- func GetFilterValOrDefault[T any](fName string, filters Filters[any], def T) T
- func MarshalOperator(op filter.Operator) string
- func ParseOperator(val string) filter.Operator
- func UpdateFilter[T any](q Query, name string, ...)
- func Validate(q Query, opts ...ValidationOpt) error
- type Cursor
- type Filters
- type Option
- func Filter(f filter.FieldFilter[any]) Option
- func FilterBy(op filter.Operator, fieldName, val any) Option
- func FilterByTriples(opFieldVals ...any) Option
- func IncludedResourceObjects(relationshipNames ...string) Option
- func Pagination(limit, offset int) Option
- func ParseOptsFromHTTPReq(r *http.Request, opts ...ParseOpt) ([]Option, error)
- func ParseURLQueryOpts(uri *url.URL, parseOpts ...ParseOpt) ([]Option, error)
- func SortBy(sortParams ...any) Option
- type PaginationParams
- type ParseOpt
- type Query
- type SortingDir
- type SortingParams
- type ValidationFunc
- type ValidationOpt
Constants ¶
View Source
const ( FieldNameQuery = "query" FieldNamePagination = "pagination" FieldNameSorting = "sorting" FieldNameIncludes = "includes" )
Variables ¶
View Source
var ( ErrInvalidFilterFormat = errors.New("filter format should be filter[field][operator]") ErrInvalidOperator = errors.New("invalid operator") //nolint:gochecknoglobals // map is used in every GET request with filters, it's more efficient to keep it global Operators = map[string]filter.Operator{ "eq": filter.OpEq, "ne": filter.OpNEq, "gt": filter.OpGT, "gte": filter.OpGTEq, "lt": filter.OpLT, "lte": filter.OpLTEq, "in": filter.OpIn, "not-in": filter.OpNotIn, "is": filter.OpIs, "is-not": filter.OpIsNot, "like": filter.OpLike, "btw": filter.OpBetween, "any": filter.OpContains, "any-like": filter.OpContainsLike, } //nolint:gochecknoglobals // map is used in every GET request with filters, it's more efficient to keep it global OperatorStrings = map[filter.Operator]string{ filter.OpEq: "eq", filter.OpNEq: "ne", filter.OpGT: "gt", filter.OpGTEq: "gte", filter.OpLT: "lt", filter.OpLTEq: "lte", filter.OpIn: "in", filter.OpNotIn: "not-in", filter.OpIs: "is", filter.OpIsNot: "is-not", filter.OpLike: "like", filter.OpBetween: "btw", filter.OpContains: "any", filter.OpContainsLike: "any-like", } )
Functions ¶
func AddFilterParam ¶
func AddFilterParam(queryParams url.Values, fieldName string, operator filter.Operator, value interface{})
AddFilterParam is a convenience function to add a single filter parameter
func DoesInclude ¶
func EncodeCursor ¶
func FiltersToURLValues ¶
FiltersToURLValues converts query filters to url.Values with proper JSON:API format The format follows: filter[field][operator]=value
func FormatNextURL ¶
func FormatNextURL[R resource.Resource](ctx context.Context, r []R, req protoreflect.ProtoMessage) (nextUrl string)
func GetFilterValOrDefault ¶
func MarshalOperator ¶
func ParseOperator ¶
func UpdateFilter ¶
func Validate ¶
func Validate(q Query, opts ...ValidationOpt) error
Types ¶
type Option ¶
type Option func(q *query)
func FilterByTriples ¶
func IncludedResourceObjects ¶
func Pagination ¶
func ParseOptsFromHTTPReq ¶
func ParseURLQueryOpts ¶
type PaginationParams ¶
func (*PaginationParams) Delete ¶
func (p *PaginationParams) Delete()
type ParseOpt ¶
type ParseOpt func(c *parseConfig)
func DefaultPagination ¶
func SkipDefaultPagination ¶
func SkipDefaultPagination() ParseOpt
type Query ¶
type Query interface {
Filters() Filters[any]
Sorting() *SortingParams
Merge(q Query)
Pagination() *PaginationParams
IncludedResourceObjects() []string
Equal(another Query) bool
}
type SortingDir ¶
type SortingDir uint
const ( SortDirUndefined SortingDir = iota SortAsc SortDesc )
func (SortingDir) String ¶
func (sd SortingDir) String() string
func (SortingDir) Valid ¶
func (sd SortingDir) Valid() bool
type SortingParams ¶
type SortingParams struct {
// contains filtered or unexported fields
}
func (*SortingParams) Get ¶
func (sp *SortingParams) Get(key string) SortingDir
func (*SortingParams) Keys ¶
func (sp *SortingParams) Keys() []string
func (*SortingParams) Set ¶
func (sp *SortingParams) Set(key string, v SortingDir)
type ValidationFunc ¶
type ValidationFunc func(f filter.FieldFilter[any]) error
type ValidationOpt ¶
type ValidationOpt func(c *validator) error
func AtLeastOneFilter ¶
func AtLeastOneFilter() ValidationOpt
func GroupedFilters ¶
func GroupedFilters(fs ...string) ValidationOpt
func MandatoryFilters ¶
func MandatoryFilters(fs ...string) ValidationOpt
func OptionalFilters ¶
func OptionalFilters(fs ...string) ValidationOpt
func SortFields ¶
func SortFields(fs ...string) ValidationOpt
func ValidFilter ¶
func ValidFilter(field string, fs ...ValidationFunc) ValidationOpt
Click to show internal directories.
Click to hide internal directories.