lister

package module
v1.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 13, 2022 License: MIT Imports: 8 Imported by: 0

README

Lister

Lister helps parsing list request (page, limit, sort, order, filters).

Requirements

RequestResolver

Request resolver is a function that parse lister fields from request (string, form, etc.). lister contains following resolver by default:

Note: You can write your own resolver by implementing func(lister Lister, data any) error signature.

RecordResolver: this resolver take ListRecord struct as input and parse to lister.

Base64Resolver: this resolver parse lister fields from Base64 encoded json string.

JsonStringResolver: this resolver parse lister fields from json string.

FiberFormResolver: this resolver parse lister fields from goFiber request context (json, form and xml supported).

Request Fields Signature
{
  "page": 1,
  "limit": 10,
  "sort": "name",
  "order": "asc",
  "search": "john",
  "filters": {
    "minAge": 25,
    "gender": "female",
    "permissions": ["acc", "report"]
  }
}

Create Lister

import "github.com/bopher/lister"
import "fmt"
lst := lister.New()
lst.SetLimits(10, 25, 50, 100)
lst.SetSorts("_id", "name", "last_activity")
lister.JsonStringResolver(lst,`{"page": 2, "limit": 10}`)
lst.SetTotal(/* Get Total Record Count From Somewhere */)
// Do other operations, paginate and fetch record
fmt.Println(lst.ResponseWithData(myData))

Usage

Lister interface contains following methods:

SetPage

Set current page.

SetPage(page uint)
Page

Get current page.

Page() uint
SetLimits

Set valid limits list.

SetLimits(limits ...uint)
Limits

Get valid limits.

Limits() []uint
SetLimit

Set limit.

SetLimit(limit uint)
Limit

Get limit.

Limit() uint
SetSorts

Set valid sorts list.

SetSorts(sorts ...string)
Sorts

Get valid sorts.

Sorts() []string
SetSort

Set sort.

SetSort(sort string)
Sort

Get sort.

Sort() string
SetOrder

Set order (valid values are "asc", "desc", "1", "-1", 1 and -1).

SetOrder(order any)
Order

Get order.

Order() string
OrderNumeric

Return order in 1 and -1.

OrderNumeric() int8
SetSearch

Set search phrase.

SetSearch(search string)

Get search phrase.

Search() string
SetFilters

Set filters list.

SetFilters(filters map[string]any)
Filters

Get filters list.

Filters() map[string]any
SetFilter

Set filter.

SetFilter(key string, value any)
Filter

Get filter.

Filter(key string) any
HasFilter

Check if filter exists.

HasFilter(key string) bool
CastFilter

Parse filter as caster.

CastFilter(key string) caster.Caster
SetMeta

Set meta data.

SetMeta(key string, value any)
Meta

Get meta.

Meta(key string) any
HasMeta

Check if meta exists.

HasMeta(key string) bool
CastMeta

Parse meta as caster.

CastMeta(key string) caster.Caster
MetaData

Get meta data list.

MetaData() map[string]any
SetTotal

Set total records count. You must pass total records count to this method for getting paginator information.

Caution: Call this method after setting all lister fields(page, limits, etc).

SetTotal(total uint64)
Total

Get total records count.

Total() uint64
From

Get from record position.

From() uint64
To

Get to record position.

To() uint64
Pages

Get total pages count.

Pages() uint
SQLSortOrder

Get sql order and limit command as string.

SQLSortOrder() string
Response

Get response for json, contains pagination information and meta data.

Response() map[string]any
ResponseWithData

Return response with data.

ResponseWithData(data any) map[string]any

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Base64Resolver

func Base64Resolver(lister Lister, data any) error

Base64Resolver parse data from base64 encoded json string

func FiberFormResolver

func FiberFormResolver(lister Lister, data any) error

FiberFormResolver parse parameters from fiber context

func JsonStringResolver

func JsonStringResolver(lister Lister, data any) error

JsonStringResolver parse parameters from json string

func RecordResolver added in v1.1.0

func RecordResolver(lister Lister, data any) error

RecordResolver fill lister from ListerRecord

Types

type Lister

type Lister interface {
	// SetPage set current page
	SetPage(page uint)
	// Page get current page
	Page() uint
	// SetLimits set valid limits list
	SetLimits(limits ...uint)
	// Limits get valid limits
	Limits() []uint
	// SetLimit set limit
	SetLimit(limit uint)
	// Limit get limit
	Limit() uint
	// SetSorts set valid sorts list
	SetSorts(sorts ...string)
	// Sorts get valid sorts
	Sorts() []string
	// SetSort set sort
	SetSort(sort string)
	// Sort get sort
	Sort() string
	// SetOrder set order (valid values are "asc", "desc", "1", "-1", 1 and -1)
	SetOrder(order any)
	// Order get order
	Order() string
	// OrderNumeric return order in 1 and -1
	OrderNumeric() int8
	// SetSearch set search phrase
	SetSearch(search string)
	// Search get search phrase
	Search() string
	// SetFilters set filters list
	SetFilters(filters map[string]any)
	// Filters get filters list
	Filters() map[string]any
	// SetFilter set filter
	SetFilter(key string, value any)
	// Filter get filter
	Filter(key string) any
	// HasFilter check if filter exists
	HasFilter(key string) bool
	// CastFilter parse filter as caster
	CastFilter(key string) caster.Caster
	// SetMeta set meta data
	SetMeta(key string, value any)
	// Meta get meta
	Meta(key string) any
	// HasMeta check if meta exists
	HasMeta(key string) bool
	// MetaData get meta data list
	MetaData() map[string]any
	// CastMeta parse meta as caster
	CastMeta(key string) caster.Caster
	// SetTotal Set total records count
	SetTotal(total uint64)
	// Total get total records count
	Total() uint64
	// From get from record position
	From() uint64
	// To get to record position
	To() uint64
	// Pages get total pages count
	Pages() uint
	// SQLSortOrder get sql order and limit command as string
	SQLSortOrder() string
	// Response get response for json, contains pagination information and meta data
	Response() map[string]any
	// ResponseWithData return response with data
	ResponseWithData(data any) map[string]any
}

func New

func New() Lister

type ListerRequest

type ListerRequest struct {
	Page    uint           `json:"page" form:"page" xml:"page"`
	Limit   uint           `json:"limit" form:"limit" xml:"limit"`
	Sort    string         `json:"sort" form:"sort" xml:"sort"`
	Order   string         `json:"order" form:"order" xml:"order"`
	Search  string         `json:"search" form:"search" xml:"search"`
	Filters map[string]any `json:"filters" form:"filters" xml:"filters"`
}

type RequestResolver

type RequestResolver func(lister Lister, data any) error

RequestResolver

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL