1- // SPDX-FileCopyrightText: 2026 SUSE LLC
1+ // SPDX-FileCopyrightText: 2026 Jayprakash
22//
33// SPDX-License-Identifier: Apache-2.0
44
55package get
66
77import (
88 "fmt"
9- "net/url"
109 "sort"
1110 "strings"
1211
1312 "github.com/uyuni-project/uyuni-tools/shared/api"
1413 apitypes "github.com/uyuni-project/uyuni-tools/shared/api/types"
1514 . "github.com/uyuni-project/uyuni-tools/shared/l10n"
15+ "github.com/uyuni-project/uyuni-tools/shared/utils"
1616)
1717
18- type ColumnDef struct {
19- Header string
20- Field string
18+ type ResourceFetcher interface {
19+ List ( client * api. APIClient , filter string , page , pageSize int ) ([] map [ string ] any , int , error )
20+ Columns () []utils. ColumnDef
2121}
2222
23- type ResourceFetcher interface {
24- List (client * api.APIClient , filter string , page , pageSize int ) ([]map [string ]any , error )
25- Columns () []ColumnDef
23+ type Resource struct {
24+ Fetcher ResourceFetcher
25+ Aliases []string
26+ Description string
2627}
2728
28- var resourceTypes = map [string ]ResourceFetcher {
29- "system" : systemFetcher {},
30- "systemgroup" : systemGroupFetcher {},
29+ var resourceTypes = map [string ]Resource {
30+ "system" : {
31+ Fetcher : systemFetcher {},
32+ Aliases : []string {"sys" },
33+ Description : "List systems" ,
34+ },
35+ "systemgroup" : {
36+ Fetcher : systemGroupFetcher {},
37+ Aliases : []string {"grp" },
38+ Description : "List system groups" ,
39+ },
3140}
3241
3342func registeredTypes () []string {
34- names := make ([]string , 0 , len ( resourceTypes ) )
35- for name := range resourceTypes {
43+ names := make ([]string , 0 )
44+ for name , res := range resourceTypes {
3645 names = append (names , name )
46+ names = append (names , res .Aliases ... )
3747 }
3848 sort .Strings (names )
3949 return names
@@ -43,40 +53,37 @@ func registeredTypesText() string {
4353 return strings .Join (registeredTypes (), ", " )
4454}
4555
46- func lookupFetcher (name string ) (ResourceFetcher , error ) {
47- fetcher , ok := resourceTypes [name ]
48- if ! ok {
49- return nil , fmt .Errorf (L ("unknown resource type %q; available: %s" ), name , registeredTypesText ())
56+ func GetResourceHelp () string {
57+ var lines []string
58+ for name , res := range resourceTypes {
59+ aliases := ""
60+ if len (res .Aliases ) > 0 {
61+ aliases = fmt .Sprintf (" (%s)" , strings .Join (res .Aliases , ", " ))
62+ }
63+ lines = append (lines , fmt .Sprintf (" %-20s - %s" , name + aliases , L (res .Description )))
5064 }
51- return fetcher , nil
65+ sort .Strings (lines )
66+ return strings .Join (lines , "\n " )
5267}
5368
54- func listFiltered (client * api.APIClient , endpoint , filter string , page , pageSize int ) ([]map [string ]any , error ) {
55- filterKey , filterValue := "" , ""
56- if filter != "" {
57- filterKey , filterValue = parseFilter (filter )
69+ func lookupFetcher (name string ) (ResourceFetcher , error ) {
70+ if res , ok := resourceTypes [name ]; ok {
71+ return res .Fetcher , nil
5872 }
73+ for _ , res := range resourceTypes {
74+ if utils .Contains (res .Aliases , name ) {
75+ return res .Fetcher , nil
76+ }
77+ }
78+ return nil , fmt .Errorf (L ("unknown resource type %q; available: %s" ), name , registeredTypesText ())
79+ }
5980
60- query := url.Values {}
61- query .Set ("filterKey" , filterKey )
62- query .Set ("filterValue" , filterValue )
63- query .Set ("page" , fmt .Sprintf ("%d" , page ))
64- query .Set ("pageSize" , fmt .Sprintf ("%d" , pageSize ))
65-
81+ func listFiltered (client * api.APIClient , endpoint , query string ) ([]map [string ]any , int , error ) {
6682 res , err := api .Get [apitypes.FilteredResponse [map [string ]any ]](
67- client , fmt .Sprintf ("%s?%s" , endpoint , query . Encode () ),
83+ client , fmt .Sprintf ("%s?%s" , endpoint , query ),
6884 )
6985 if err != nil {
70- return nil , err
71- }
72- return res .Result .Data , nil
73- }
74-
75- func parseFilter (expr string ) (string , string ) {
76- for _ , op := range []string {">=" , "<=" , "!=" , "=" , ">" , "<" } {
77- if i := strings .Index (expr , op ); i >= 0 {
78- return strings .TrimSpace (expr [:i ]), strings .TrimSpace (expr [i :])
79- }
86+ return nil , 0 , err
8087 }
81- return strings . TrimSpace ( expr ), ""
88+ return res . Result . Data , res . Result . Total , nil
8289}
0 commit comments