github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/resource/resourcev1/controller/resource_service_binding.go (about)

     1  package controller
     2  
     3  import (
     4  	"net/url"
     5  
     6  	"github.com/IBM-Cloud/bluemix-go/client"
     7  	"github.com/IBM-Cloud/bluemix-go/crn"
     8  	"github.com/IBM-Cloud/bluemix-go/helpers"
     9  	"github.com/IBM-Cloud/bluemix-go/models"
    10  	"github.com/IBM-Cloud/bluemix-go/rest"
    11  )
    12  
    13  type CreateServiceBindingRequest struct {
    14  	SourceCRN  crn.CRN                `json:"source_crn"`
    15  	TargetCRN  crn.CRN                `json:"target_crn"`
    16  	Parameters map[string]interface{} `json:"parameters,omitempty"`
    17  }
    18  
    19  type ResourceServiceBindingRepository interface {
    20  	ListBindings(cb func(models.ServiceBinding) bool) error
    21  	GetBinding(bindingID string) (models.ServiceBinding, error)
    22  	CreateBinding(CreateServiceBindingRequest) (models.ServiceBinding, error)
    23  	DeleteBinding(bindingID string) error
    24  }
    25  
    26  type serviceBindingRepository struct {
    27  	client *client.Client
    28  }
    29  
    30  func newServiceBindingRepository(c *client.Client) ResourceServiceBindingRepository {
    31  	return &serviceBindingRepository{
    32  		client: c,
    33  	}
    34  }
    35  
    36  func (r *serviceBindingRepository) ListBindings(cb func(models.ServiceBinding) bool) error {
    37  	listRequest := rest.GetRequest("/v1/resource_bindings")
    38  	req, err := listRequest.Build()
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	_, err = r.client.GetPaginated(
    44  		req.URL.String(),
    45  		NewRCPaginatedResources(models.ServiceBinding{}),
    46  		func(resource interface{}) bool {
    47  			if binding, ok := resource.(models.ServiceBinding); ok {
    48  				return cb(binding)
    49  			}
    50  			return false
    51  		})
    52  
    53  	return err
    54  }
    55  
    56  func (r *serviceBindingRepository) CreateBinding(createBindingRequest CreateServiceBindingRequest) (models.ServiceBinding, error) {
    57  	resp := models.ServiceBinding{}
    58  	_, err := r.client.Post("/v1/resource_bindings", createBindingRequest, &resp)
    59  	if err != nil {
    60  		return resp, err
    61  	}
    62  	return resp, nil
    63  }
    64  
    65  func (r *serviceBindingRepository) GetBinding(bindingID string) (models.ServiceBinding, error) {
    66  	resp := models.ServiceBinding{}
    67  	request := rest.GetRequest(helpers.GetFullURL(*r.client.Config.Endpoint, "/v1/resource_bindings/"+url.PathEscape(bindingID)))
    68  	_, err := r.client.SendRequest(request, &resp)
    69  	if err != nil {
    70  		return resp, err
    71  	}
    72  	return resp, nil
    73  
    74  }
    75  
    76  func (r *serviceBindingRepository) DeleteBinding(bindingID string) error {
    77  	request := rest.DeleteRequest(helpers.GetFullURL(*r.client.Config.Endpoint, "/v1/resource_bindings/"+url.PathEscape(bindingID))).Query("id", url.PathEscape(bindingID))
    78  	_, err := r.client.SendRequest(request, nil)
    79  	return err
    80  }