ActiveChooN / gin-gorm-filter

Filter GORM query with query params
MIT License
16 stars 13 forks source link
filter gin golang gorm

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"

Supported filter operators

TODO list