50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package query
|
|
|
|
import (
|
|
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
|
"github.com/Caknoooo/go-gin-clean-starter/modules/permissions/dto"
|
|
"github.com/Caknoooo/go-pagination"
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type M_Permissions struct {
|
|
ID uuid.UUID `json:"id" gorm:"column:id"`
|
|
Name string `json:"name" gorm:"column:name"`
|
|
MenuID uuid.UUID `json:"menu_id" gorm:"column:menu_id"`
|
|
Menu dto.Menu `json:"menu" gorm:"foreignKey:MenuID;references:ID"`
|
|
}
|
|
|
|
type PermissionsFilter struct {
|
|
pagination.BaseFilter
|
|
Name string `form:"name"`
|
|
MenuID string `form:"menu_id"`
|
|
}
|
|
|
|
func (f *PermissionsFilter) ApplyFilters(q *gorm.DB) *gorm.DB {
|
|
if f.Name != "" {
|
|
q = q.Where("name ILIKE ?", "%"+f.Name+"%")
|
|
}
|
|
if f.MenuID != "" {
|
|
q = q.Where("menu_id = ?", f.MenuID)
|
|
}
|
|
q = q.Model(entities.M_Permissions{}).Preload("Menu")
|
|
return q
|
|
}
|
|
|
|
func (f *PermissionsFilter) GetTableName() string {
|
|
return "m_permissions"
|
|
}
|
|
|
|
func (f *PermissionsFilter) GetSearchFields() []string {
|
|
return []string{"name"}
|
|
}
|
|
|
|
func (f *PermissionsFilter) GetDefaultSort() string {
|
|
return "id asc"
|
|
}
|
|
|
|
func (f *PermissionsFilter) GetPagination() pagination.PaginationRequest {
|
|
return f.Pagination
|
|
}
|