-
Notifications
You must be signed in to change notification settings - Fork 24
feat: add server-side search and filtering for agents list #71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
1bf6a5e
84168f7
343f203
02f7f1c
8c1344d
fb2164c
253eeb2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| // Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com). | ||
| // | ||
| // WSO2 LLC. licenses this file to you under the Apache License, | ||
| // Version 2.0 (the "License"); you may not use this file except | ||
| // in compliance with the License. | ||
| // You may obtain a copy of the License at | ||
| // | ||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||
| // | ||
| // Unless required by applicable law or agreed to in writing, | ||
| // software distributed under the License is distributed on an | ||
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
| // KIND, either express or implied. See the License for the | ||
| // specific language governing permissions and limitations | ||
| // under the License. | ||
|
|
||
| package models | ||
|
|
||
| // Valid filter values as constants | ||
| const ( | ||
| // Sort field options | ||
| SortByName = "name" | ||
| SortByCreatedAt = "createdAt" | ||
| SortByUpdatedAt = "updatedAt" | ||
|
|
||
| // Sort order options | ||
| SortOrderAsc = "asc" | ||
| SortOrderDesc = "desc" | ||
|
|
||
| // Provisioning type options | ||
| ProvisioningInternal = "internal" | ||
| ProvisioningExternal = "external" | ||
| ) | ||
|
|
||
| // AgentFilter holds filter options for listing agents | ||
| type AgentFilter struct { | ||
| Search string // search in name, displayName, description | ||
| ProvisioningType string // "internal", "external" | ||
| SortBy string // "name", "createdAt", "updatedAt" | ||
| SortOrder string // "asc", "desc" | ||
| Limit int | ||
| Offset int | ||
| } | ||
|
Comment on lines
+35
to
+43
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion | 🟠 Major Consider adding validation or using constants for filter values. The AgentFilter struct accepts string values for SortBy, SortOrder, and ProvisioningType without validation. Invalid values will be silently ignored or cause unexpected behavior in the repository layer. Consider:
This will improve type safety and provide better error messages to API consumers. 🤖 Prompt for AI AgentsNaming inconsistency between default value and expected format. The comment on line 23 documents SortBy values as camelCase ("name", "createdAt", "updatedAt"), but This mismatch will cause the default filter to skip the switch statement and fall through to "created_at" being used directly as the sort column, which works accidentally but is inconsistent with the documented API contract. 🔎 Apply this diff to align the default with the expected format: func DefaultAgentFilter() AgentFilter {
return AgentFilter{
- SortBy: "created_at",
+ SortBy: "createdAt",
SortOrder: "desc",
Limit: 20,
Offset: 0,
}
}
🤖 Prompt for AI Agents |
||
|
|
||
| // DefaultAgentFilter returns filter with sensible defaults | ||
| func DefaultAgentFilter() AgentFilter { | ||
| return AgentFilter{ | ||
| SortBy: SortByCreatedAt, | ||
| SortOrder: SortOrderDesc, | ||
| Limit: 20, | ||
| Offset: 0, | ||
| } | ||
| } | ||
|
|
||
| // IsValidSortBy checks if sortBy value is valid | ||
| func IsValidSortBy(sortBy string) bool { | ||
| return sortBy == "" || sortBy == SortByName || sortBy == SortByCreatedAt || sortBy == SortByUpdatedAt | ||
| } | ||
|
|
||
| // IsValidSortOrder checks if sortOrder value is valid | ||
| func IsValidSortOrder(sortOrder string) bool { | ||
| return sortOrder == "" || sortOrder == SortOrderAsc || sortOrder == SortOrderDesc | ||
| } | ||
|
|
||
| // IsValidProvisioningType checks if provisioningType value is valid | ||
| func IsValidProvisioningType(provisioningType string) bool { | ||
| return provisioningType == "" || provisioningType == ProvisioningInternal || provisioningType == ProvisioningExternal | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.