Skip to content

Latest commit

 

History

History
59 lines (50 loc) · 1.84 KB

README.md

File metadata and controls

59 lines (50 loc) · 1.84 KB

Gin GORM filter

GitHub GitHub Workflow Status (branch) GitHub release (latest by date)

Scope function for GORM queries provides easy filtering with query parameters

Usage

go get github.com/ActiveChooN/gin-gorm-filter

Model definition

type UserModel struct {
    gorm.Model
    Username string `gorm:"uniqueIndex" filter:"param:login;searchable;filterable"`
    FullName string `filter:"searchable"`
    Role     string `filter:"filterable"`
}

param tag in that case defines custom column name for the query param

Controller Example

func GetUsers(c *gin.Context) {
	var users []UserModel
	var usersCount int64
	db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
	err := db.Model(&UserModel{}).Scopes(
		filter.FilterByQuery(c, filter.ALL),
	).Count(&usersCount).Find(&users).Error
	if err != nil {
		c.JSON(http.StatusBadRequest, err.Error())
		return
	}
	serializer := serializers.PaginatedUsers{Users: users, Count: usersCount}
	c.JSON(http.StatusOK, serializer.Response())
}

Any filter combination can be used here filter.PAGINATION|filter.ORDER_BY e.g. Important note: GORM model should be initialize first for DB, otherwise filter and search won't work

Request example

curl -X GET http://localhost:8080/users?page=1&limit=10&order_by=username&order_direction=asc&filter="name:John"

TODO list

  • Write tests for the lib with CI integration
  • Add ILIKE integration for PostgreSQL database
  • Add other filters, like > or !=