ssp

package module
v2.3.0 Latest Latest
Warning

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

Go to latest
Published: Mar 16, 2023 License: MIT Imports: 7 Imported by: 0

README

gormssp

Using Datatables pagination with golang

Build Status Go Report Card codecov MIT licensed GoDoc PkgGoDev GitHub release (latest by date)

Pre-requisites 📋

This is for old gorm, for the new gorm (https://github.com/go-gorm/gorm) use this https://github.com/juaismar/go-gormssp

Database compatible: Postgres (stable), SQLite (without REGEXP)

Installation 🔧

Install with the next command:

go get github.com/juaismar/gormssp/v2

and import the package with:

import ("github.com/juaismar/gormssp/v2")

Working example 🚀

A working example on https://github.com/juaismar/GormSSP_Example

-This is a simple code that sends data to the Datatables JS client.

import (
	SSP "github.com/juaismar/gormssp/v2"
)

func (c *User) Pagination() {

  // Array of database columns which should be read and sent back to DataTables.
  // The `db` parameter represents the column name in the database, while the `dt`
  // parameter represents the DataTables column identifier. In this case simple
  // indexes but can be a string
  // Formatter is a function to customize the value of field , can be nil.
  columns := []SSP.Data{
    {Db: "name", Dt: 0, Formatter: nil},
    {Db: "role", Dt: 1, Formatter: nil},
    {Db: "email", Dt: 2, Formatter: nil},
  }

  // Send the data to the client
  // "users" is the name of the table
  c.Data["json"], _ = SSP.Simple(c, model.ORM, "users", columns)
  c.ServeJSON()
}

-This is an example of data formatting.

SSP.Data{Db: "registered", Dt: 3, Formatter: func(
  data interface{}, row map[string]interface{}) (interface{}, error) {
  //data is the value id column, row is a map whit the values of all columns
  if data != nil {
    return data.(time.Time).Format("2006-01-02 15:04:05"), nil
  }
  return "", nil
}}

-This is a complex example.

import ("github.com/juaismar/gormssp/v2")

func (c *User) Pagination() {
    columns := []SSP.Data{
      {Db: "id", Dt: "id", Formatter: nil},
    }
    //whereResult is a WHERE condition to apply to the result set
    //whereAll is a WHERE condition to apply to all queries
    var whereResult []string
    var whereAll []string
    var whereJoin = make(map[string]string, 0)
    whereAll = append(whereAll, "deleted_at IS NULL")

    c.Data["json"], _ = SSP.Complex(c, model.ORM, "events", columns, whereResult, whereAll, whereJoin)
    c.ServeJSON()
}

-Tables with spaces in the name or styart whit numbers must be between ".

SSP.Data{Db: "\"1My special table\"", Dt: 3, Formatter: nil}

-Can implement functions in search, example:accent insensitive search

SELECT * FROM users WHERE f_unaccent(name) LIKE '%maria%';.

can be implemented as:

SSP.Data{Db: "name", Dt: 2, Formatter: nil, Sf: "f_unaccent(name)"}

-This project is based in the PHP version of datatables pagination in https://datatables.net/examples/data_sources/server_side -Original file can be found in https://github.com/DataTables/DataTables/blob/master/examples/server_side/scripts/ssp.class.php

Author ✒️

Thanks 🎁

Readme.md based in https://gist.github.com/Villanuevand/6386899f70346d4580c723232524d35a

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckReserved added in v2.1.0

func CheckReserved(columnName string) string

CheckReserved Skip reserved words

func DrawNumber added in v2.1.1

func DrawNumber(c Controller) int

DrawNumber Get drawNumber

func ParamToBool added in v2.1.1

func ParamToBool(c Controller, paramName string) (requestRegex bool)

ParamToBool get a param and parse it to bool

Types

type Controller

type Controller interface {
	GetString(string, ...string) string
}

Controller emulate the beego controller

type Data

type Data struct {
	Db        string                                                                  //name of column
	Dt        interface{}                                                             //id of column in client (int or string)
	Cs        bool                                                                    //case sensitive - optional default false
	Sf        string                                                                  //Search Function - for custom functions declared in your ddbb
	Formatter func(data interface{}, row map[string]interface{}) (interface{}, error) // - optional
}

Data is a line in map that link the database field with datatable field

type MessageDataTable

type MessageDataTable struct {
	Draw            int           `json:"draw"`
	RecordsTotal    int           `json:"recordsTotal"`
	RecordsFiltered int           `json:"recordsFiltered"`
	Data            []interface{} `json:"data,nilasempty"`
}

MessageDataTable is theresponse object

func Complex

func Complex(c Controller, conn *gorm.DB, table string, columns []Data,
	whereResult []string,
	whereAll []string,
	whereJoin map[string]string) (responseJSON MessageDataTable, err error)

Complex is a main method, externally called

func Simple

func Simple(c Controller, conn *gorm.DB,
	table string,
	columns []Data) (responseJSON MessageDataTable, err error)

Simple is a main method, externally called

Directories

Path Synopsis
test
dbs

Jump to

Keyboard shortcuts

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