Skip to content

Latest commit

 

History

History
51 lines (43 loc) · 1.4 KB

README.md

File metadata and controls

51 lines (43 loc) · 1.4 KB

Gin GORM filter

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

TODO list

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