github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/mccp/mccpv2/service_bindings.go (about) 1 package mccpv2 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/IBM-Cloud/bluemix-go/client" 8 "github.com/IBM-Cloud/bluemix-go/rest" 9 ) 10 11 //ServiceBindingRequest ... 12 type ServiceBindingRequest struct { 13 ServiceInstanceGUID string `json:"service_instance_guid"` 14 AppGUID string `json:"app_guid"` 15 Parameters string `json:"parameters,omitempty"` 16 } 17 18 //ServiceBindingMetadata ... 19 type ServiceBindingMetadata struct { 20 GUID string `json:"guid"` 21 URL string `json:"url"` 22 } 23 24 //ServiceBindingEntity ... 25 type ServiceBindingEntity struct { 26 ServiceInstanceGUID string `json:"service_instance_guid"` 27 AppGUID string `json:"app_guid"` 28 Credentials map[string]interface{} `json:"credentials"` 29 } 30 31 //ServiceBindingResource ... 32 type ServiceBindingResource struct { 33 Resource 34 Entity ServiceBindingEntity 35 } 36 37 //ServiceBindingFields ... 38 type ServiceBindingFields struct { 39 Metadata ServiceBindingMetadata 40 Entity ServiceBindingEntity 41 } 42 43 //ServiceBinding model 44 type ServiceBinding struct { 45 GUID string 46 ServiceInstanceGUID string 47 AppGUID string 48 Credentials map[string]interface{} 49 } 50 51 //ToFields .. 52 func (resource ServiceBindingResource) ToFields() ServiceBinding { 53 entity := resource.Entity 54 55 return ServiceBinding{ 56 GUID: resource.Metadata.GUID, 57 ServiceInstanceGUID: entity.ServiceInstanceGUID, 58 AppGUID: entity.AppGUID, 59 Credentials: entity.Credentials, 60 } 61 } 62 63 //ServiceBindings ... 64 type ServiceBindings interface { 65 Create(req ServiceBindingRequest) (*ServiceBindingFields, error) 66 Get(guid string) (*ServiceBindingFields, error) 67 Delete(guid string, opts ...bool) error 68 List(filters ...string) ([]ServiceBinding, error) 69 } 70 71 type serviceBinding struct { 72 client *client.Client 73 } 74 75 func newServiceBindingAPI(c *client.Client) ServiceBindings { 76 return &serviceBinding{ 77 client: c, 78 } 79 } 80 81 func (r *serviceBinding) Get(sbGUID string) (*ServiceBindingFields, error) { 82 rawURL := fmt.Sprintf("/v2/service_bindings/%s", sbGUID) 83 sbFields := ServiceBindingFields{} 84 _, err := r.client.Get(rawURL, &sbFields, nil) 85 if err != nil { 86 return nil, err 87 } 88 return &sbFields, nil 89 } 90 91 func (r *serviceBinding) Create(req ServiceBindingRequest) (*ServiceBindingFields, error) { 92 rawURL := "/v2/service_bindings" 93 sbFields := ServiceBindingFields{} 94 _, err := r.client.Post(rawURL, req, &sbFields) 95 if err != nil { 96 return nil, err 97 } 98 return &sbFields, nil 99 } 100 101 // opts is list of boolean parametes 102 // opts[0] - async - Will run the delete request in a background job. Recommended: 'true'. Default to 'true'. 103 104 func (r *serviceBinding) Delete(guid string, opts ...bool) error { 105 async := true 106 if len(opts) > 0 { 107 async = opts[0] 108 } 109 rawURL := fmt.Sprintf("/v2/service_bindings/%s?async=%t", guid, async) 110 _, err := r.client.Delete(rawURL) 111 return err 112 } 113 114 func (r *serviceBinding) List(filters ...string) ([]ServiceBinding, error) { 115 rawURL := "/v2/service_bindings" 116 req := rest.GetRequest(rawURL) 117 if len(filters) > 0 { 118 req.Query("q", strings.Join(filters, "")) 119 } 120 httpReq, err := req.Build() 121 if err != nil { 122 return nil, err 123 } 124 path := httpReq.URL.String() 125 bindings, err := listServiceBindingWithPath(r.client, path) 126 if err != nil { 127 return nil, err 128 } 129 return bindings, nil 130 } 131 132 func listServiceBindingWithPath(c *client.Client, path string) ([]ServiceBinding, error) { 133 var sb []ServiceBinding 134 _, err := c.GetPaginated(path, NewCCPaginatedResources(ServiceBindingResource{}), func(resource interface{}) bool { 135 if sbResource, ok := resource.(ServiceBindingResource); ok { 136 sb = append(sb, sbResource.ToFields()) 137 return true 138 } 139 return false 140 }) 141 return sb, err 142 }