github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/mccp/mccpv2/private_domain.go (about)

     1  package mccpv2
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/IBM-Cloud/bluemix-go/bmxerror"
     7  	"github.com/IBM-Cloud/bluemix-go/client"
     8  	"github.com/IBM-Cloud/bluemix-go/rest"
     9  )
    10  
    11  //ErrCodePrivateDomainDoesnotExist ...
    12  var ErrCodePrivateDomainDoesnotExist = "PrivateDomainDoesnotExist"
    13  
    14  //PrivateDomainRequest ...
    15  type PrivateDomainRequest struct {
    16  	Name    string `json:"name,omitempty"`
    17  	OrgGUID string `json:"owning_organization_guid,omitempty"`
    18  }
    19  
    20  //PrivateDomaineMetadata ...
    21  type PrivateDomainMetadata struct {
    22  	GUID string `json:"guid"`
    23  	URL  string `json:"url"`
    24  }
    25  
    26  //PrivateDomainEntity ...
    27  type PrivateDomainEntity struct {
    28  	Name                   string `json:"name"`
    29  	OwningOrganizationGUID string `json:"owning_organization_guid"`
    30  	OwningOrganizationURL  string `json:"owning_organization_url"`
    31  	SharedOrganizationURL  string `json:"shared_organizations_url"`
    32  }
    33  
    34  //PrivateDomainResource ...
    35  type PrivateDomainResource struct {
    36  	Resource
    37  	Entity PrivateDomainEntity
    38  }
    39  
    40  //PrivateDomainFields ...
    41  type PrivateDomainFields struct {
    42  	Metadata PrivateDomainMetadata
    43  	Entity   PrivateDomainEntity
    44  }
    45  
    46  //ToFields ..
    47  func (resource PrivateDomainResource) ToFields() PrivateDomain {
    48  	entity := resource.Entity
    49  
    50  	return PrivateDomain{
    51  		GUID:                   resource.Metadata.GUID,
    52  		Name:                   entity.Name,
    53  		OwningOrganizationGUID: entity.OwningOrganizationGUID,
    54  		OwningOrganizationURL:  entity.OwningOrganizationURL,
    55  		SharedOrganizationURL:  entity.OwningOrganizationURL,
    56  	}
    57  }
    58  
    59  //PrivateDomain model
    60  type PrivateDomain struct {
    61  	GUID                   string
    62  	Name                   string
    63  	OwningOrganizationGUID string
    64  	OwningOrganizationURL  string
    65  	SharedOrganizationURL  string
    66  }
    67  
    68  //PrivateDomains ...
    69  type PrivateDomains interface {
    70  	FindByNameInOrg(orgGUID, domainName string) (*PrivateDomain, error)
    71  	FindByName(domainName string) (*PrivateDomain, error)
    72  	Create(req PrivateDomainRequest, opts ...bool) (*PrivateDomainFields, error)
    73  	Get(privateDomainGUID string) (*PrivateDomainFields, error)
    74  	Delete(privateDomainGUID string, opts ...bool) error
    75  }
    76  
    77  type privateDomain struct {
    78  	client *client.Client
    79  }
    80  
    81  func newPrivateDomainAPI(c *client.Client) PrivateDomains {
    82  	return &privateDomain{
    83  		client: c,
    84  	}
    85  }
    86  
    87  func (d *privateDomain) FindByNameInOrg(orgGUID, domainName string) (*PrivateDomain, error) {
    88  	rawURL := fmt.Sprintf("/v2/organizations/%s/private_domains", orgGUID)
    89  	req := rest.GetRequest(rawURL).Query("q", "name:"+domainName)
    90  	httpReq, err := req.Build()
    91  	if err != nil {
    92  		return nil, err
    93  	}
    94  	path := httpReq.URL.String()
    95  	domain, err := listPrivateDomainWithPath(d.client, path)
    96  	if err != nil {
    97  		return nil, err
    98  	}
    99  	if len(domain) == 0 {
   100  		return nil, bmxerror.New(ErrCodePrivateDomainDoesnotExist, fmt.Sprintf("Private Domain: %q doesn't exist", domainName))
   101  	}
   102  	return &domain[0], nil
   103  }
   104  
   105  func (d *privateDomain) FindByName(domainName string) (*PrivateDomain, error) {
   106  	rawURL := fmt.Sprintf("/v2/private_domains")
   107  	req := rest.GetRequest(rawURL).Query("q", "name:"+domainName)
   108  	httpReq, err := req.Build()
   109  	if err != nil {
   110  		return nil, err
   111  	}
   112  	path := httpReq.URL.String()
   113  	domain, err := listPrivateDomainWithPath(d.client, path)
   114  	if err != nil {
   115  		return nil, err
   116  	}
   117  	if len(domain) == 0 {
   118  		return nil, bmxerror.New(ErrCodePrivateDomainDoesnotExist, fmt.Sprintf("Private Domain: %q doesn't exist", domainName))
   119  	}
   120  	return &domain[0], nil
   121  }
   122  
   123  func listPrivateDomainWithPath(c *client.Client, path string) ([]PrivateDomain, error) {
   124  	var privateDomain []PrivateDomain
   125  	_, err := c.GetPaginated(path, NewCCPaginatedResources(PrivateDomainResource{}), func(resource interface{}) bool {
   126  		if privateDomainResource, ok := resource.(PrivateDomainResource); ok {
   127  			privateDomain = append(privateDomain, privateDomainResource.ToFields())
   128  			return true
   129  		}
   130  		return false
   131  	})
   132  	return privateDomain, err
   133  }
   134  
   135  /* opts is list of boolean parametes
   136  opts[0] - async - Will run the create request in a background job. Recommended: 'true'. Default to 'true'.
   137  */
   138  func (d *privateDomain) Create(req PrivateDomainRequest, opts ...bool) (*PrivateDomainFields, error) {
   139  	async := true
   140  	if len(opts) > 0 {
   141  		async = opts[0]
   142  	}
   143  	rawURL := fmt.Sprintf("/v2/private_domains?async=%t", async)
   144  	privateDomainFields := PrivateDomainFields{}
   145  	_, err := d.client.Post(rawURL, req, &privateDomainFields)
   146  	if err != nil {
   147  		return nil, err
   148  	}
   149  	return &privateDomainFields, nil
   150  }
   151  
   152  func (d *privateDomain) Get(privateDomainGUID string) (*PrivateDomainFields, error) {
   153  	rawURL := fmt.Sprintf("/v2/private_domains/%s", privateDomainGUID)
   154  	privateDomainFields := PrivateDomainFields{}
   155  	_, err := d.client.Get(rawURL, &privateDomainFields, nil)
   156  	if err != nil {
   157  		return nil, err
   158  	}
   159  	return &privateDomainFields, nil
   160  }
   161  
   162  // opts is list of boolean parametes
   163  // opts[0] - async - Will run the delete request in a background job. Recommended: 'true'. Default to 'true'.
   164  
   165  func (d *privateDomain) Delete(privateDomainGUID string, opts ...bool) error {
   166  	async := true
   167  	if len(opts) > 0 {
   168  		async = opts[0]
   169  	}
   170  	rawURL := fmt.Sprintf("/v2/private_domains/%s?async=%t", privateDomainGUID, async)
   171  	_, err := d.client.Delete(rawURL)
   172  	return err
   173  }