wms-be/modules/role/query/role_query.go

87 lines
2.2 KiB
Go

package query
import (
// "github.com/Caknoooo/go-gin-clean-starter/database/entities"
"strconv"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"github.com/Caknoooo/go-pagination"
"gorm.io/gorm"
)
type M_Role struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
IconUrl string `json:"icon_url"`
Type string `json:"type"`
HomeUrl string `json:"home_url"`
// Permissions []entities.M_Permissions `json:"permissions" gorm:"many2many:m_role_permissions;joinForeignKey:RoleID;JoinReferences:PermissionID"`
ClientID string `json:"client_id"`
Client entities.M_Client `json:"client" gorm:"foreignKey:ClientID;references:ID"`
// Client pkgdto.IdNameResponse `json:"client"`
}
type RoleFilter struct {
pagination.BaseFilter
Name string `form:"name"` // tambahkan ini
ClientID string `form:"client_id"` // tambahkan ini
Level string `form:"level"`
}
func (f *RoleFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
// Apply your filters here
if f.Name != "" {
query = query.Where("name ILIKE ?", "%"+f.Name+"%")
}
if f.ClientID != "" {
query = query.Where("client_id = ?", f.ClientID)
}
if f.Level != "" {
if levelInt, err := strconv.Atoi(f.Level); err == nil {
query = query.Where("level = ?", levelInt)
}
}
query = query.Model(entities.M_Role{}).
Preload("Client", func(db *gorm.DB) *gorm.DB {
return db.Select("m_clients.id", "m_clients.name")
})
return query
}
func (f *RoleFilter) GetTableName() string {
return "m_roles"
}
func (f *RoleFilter) GetSearchFields() []string {
return []string{"name"}
}
func (f *RoleFilter) GetDefaultSort() string {
return "id asc"
}
func (f *RoleFilter) GetIncludes() []string {
return f.Includes
}
func (f *RoleFilter) GetPagination() pagination.PaginationRequest {
return f.Pagination
}
func (f *RoleFilter) Validate() {
var validIncludes []string
allowedIncludes := f.GetAllowedIncludes()
for _, include := range f.Includes {
if allowedIncludes[include] {
validIncludes = append(validIncludes, include)
}
}
f.Includes = validIncludes
}
func (f *RoleFilter) GetAllowedIncludes() map[string]bool {
return map[string]bool{}
}