github.com/sleungcy/cli@v7.1.0+incompatible/api/cloudcontroller/ccv3/query.go (about) 1 package ccv3 2 3 import ( 4 "net/url" 5 "strings" 6 ) 7 8 // QueryKey is the type of query that is being selected on. 9 type QueryKey string 10 11 const ( 12 // AppGUIDFilter is a query parameter for listing objects by app GUID. 13 AppGUIDFilter QueryKey = "app_guids" 14 // GUIDFilter is a query parameter for listing objects by GUID. 15 GUIDFilter QueryKey = "guids" 16 // LabelSelectorFilter is a query parameter for listing objects by label 17 LabelSelectorFilter QueryKey = "label_selector" 18 // NameFilter is a query parameter for listing objects by name. 19 NameFilter QueryKey = "names" 20 // NoRouteFilter is a query parameter for skipping route creation and unmapping existing routes. 21 NoRouteFilter QueryKey = "no_route" 22 // OrganizationGUIDFilter is a query parameter for listing objects by Organization GUID. 23 OrganizationGUIDFilter QueryKey = "organization_guids" 24 // SequenceIDFilter is a query parameter for listing objects by sequence ID. 25 SequenceIDFilter QueryKey = "sequence_ids" 26 // SpaceGUIDFilter is a query parameter for listing objects by Space GUID. 27 SpaceGUIDFilter QueryKey = "space_guids" 28 // StatusValueFilter is a query parameter for listing deployments by status.value 29 StatusValueFilter QueryKey = "status_values" 30 // DomainGUIDFilter is a query param for listing events by target_guid 31 TargetGUIDFilter QueryKey = "target_guids" 32 // DomainGUIDFilter is a query param for listing objects by domain_guid 33 DomainGUIDFilter QueryKey = "domain_guids" 34 // HostsFilter is a query param for listing objects by hostname 35 HostsFilter QueryKey = "hosts" 36 // HostFilter is a query param for getting an object with the given host 37 HostFilter QueryKey = "host" 38 // Origins filter is a query parameter when getting a user by origin (Note: CAPI will return an error if usernames filter is not also provided) 39 OriginsFilter QueryKey = "origins" 40 // PathsFilter is a query param for listing objects by path 41 PathsFilter QueryKey = "paths" 42 // PathFilter is a query param for getting an object with the given host 43 PathFilter QueryKey = "path" 44 // PortFilter is a query param for getting an object with the given port (TCP routes) 45 PortFilter QueryKey = "port" 46 // PortsFilter is a query param for getting an object with the given ports (TCP routes) 47 PortsFilter QueryKey = "ports" 48 // RoleTypesFilter is a query param for getting a role by type 49 RoleTypesFilter QueryKey = "types" 50 // StackFilter is a query parameter for listing objects by stack name 51 StackFilter QueryKey = "stacks" 52 // UnmappedFilter is a query parameter specifying unmapped routes 53 UnmappedFilter QueryKey = "unmapped" 54 // UserGUIDFilter is a query parameter when getting a user by GUID 55 UserGUIDFilter QueryKey = "user_guids" 56 // UsernamesFilter is a query parameter when getting a user by username 57 UsernamesFilter QueryKey = "usernames" 58 // StatesFilter is a query parameter when getting a package's droplets by state 59 StatesFilter QueryKey = "states" 60 // ServiceBrokerNamesFilter is a query parameter when getting plans or offerings according to the Service Brokers that it relates to 61 ServiceBrokerNamesFilter QueryKey = "service_broker_names" 62 // ServiceBrokerGUIDsFilter is a query parameter for getting resources according to the service broker GUID 63 ServiceBrokerGUIDsFilter QueryKey = "service_broker_guids" 64 // ServiceOfferingNamesFilter is a query parameter when getting a plan according to the Service Offerings that it relates to 65 ServiceOfferingNamesFilter QueryKey = "service_offering_names" 66 // ServiceOfferingGUIDsFilter is a query parameter when getting resources according to service offering GUIDs 67 ServiceOfferingGUIDsFilter QueryKey = "service_offering_guids" 68 // FieldsServiceOfferingServiceBroker is a query parameter to include specific fields from a service broker in a plan response 69 FieldsServiceOfferingServiceBroker QueryKey = "fields[service_offering.service_broker]" 70 // FieldsServiceBroker is a query parameter to include specific fields from a service broker in an offering response 71 FieldsServiceBroker QueryKey = "fields[service_broker]" 72 73 // OrderBy is a query parameter to specify how to order objects. 74 OrderBy QueryKey = "order_by" 75 // PerPage is a query parameter for specifying the number of results per page. 76 PerPage QueryKey = "per_page" 77 // Include is a query parameter for specifying other resources associated with the 78 // resource returned by the endpoint 79 Include QueryKey = "include" 80 81 // GloballyEnabledStaging is the query parameter for getting only security groups that are globally enabled for staging 82 GloballyEnabledStaging QueryKey = "globally_enabled_staging" 83 84 // GloballyEnabledRunning is the query parameter for getting only security groups that are globally enabled for running 85 GloballyEnabledRunning QueryKey = "globally_enabled_running" 86 87 // NameOrder is a query value for ordering by name. This value is used in 88 // conjunction with the OrderBy QueryKey. 89 NameOrder = "name" 90 91 // PositionOrder is a query value for ordering by position. This value is 92 // used in conjunction with the OrderBy QueryKey. 93 PositionOrder = "position" 94 95 // CreatedAtDescendingOrder is a query value for ordering by created_at timestamp, 96 // in descending order. 97 CreatedAtDescendingOrder = "-created_at" 98 99 // SourceGUID is the query parameter for getting an object. Currently it's used as a package GUID 100 // to retrieve a package to later copy it to an app (CopyPackage()) 101 SourceGUID = "source_guid" 102 103 // Purge is a query parameter used on a Delete request to indicate that dependent resources should also be deleted 104 Purge = "purge" 105 ) 106 107 // Query is additional settings that can be passed to some requests that can 108 // filter, sort, etc. the results. 109 type Query struct { 110 Key QueryKey 111 Values []string 112 } 113 114 // FormatQueryParameters converts a Query object into a collection that 115 // cloudcontroller.Request can accept. 116 func FormatQueryParameters(queries []Query) url.Values { 117 params := url.Values{} 118 for _, query := range queries { 119 if query.Key == NameFilter { 120 encodedParamValues := []string{} 121 for _, valString := range query.Values { 122 commaEncoded := strings.ReplaceAll(valString, ",", "%2C") 123 encodedParamValues = append(encodedParamValues, commaEncoded) 124 } 125 query.Values = encodedParamValues 126 } 127 128 params.Add(string(query.Key), strings.Join(query.Values, ",")) 129 } 130 131 return params 132 }