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{} }