github.com/akamai/AkamaiOPEN-edgegrid-golang@v1.2.2/configgtm-v1_5/geomap.go (about)

     1  package configgtm
     2  
     3  import (
     4  	"github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1"
     5  
     6  	"fmt"
     7  )
     8  
     9  //
    10  // Handle Operations on gtm geomaps
    11  // Based on 1.5 schema
    12  //
    13  
    14  // GeoAssigment represents a GTM geo assignment element
    15  type GeoAssignment struct {
    16  	DatacenterBase
    17  	Countries []string `json:"countries"`
    18  }
    19  
    20  // GeoMap  represents a GTM GeoMap
    21  type GeoMap struct {
    22  	DefaultDatacenter *DatacenterBase  `json:"defaultDatacenter"`
    23  	Assignments       []*GeoAssignment `json:"assignments,omitempty"`
    24  	Name              string           `json:"name"`
    25  	Links             []*Link          `json:"links,omitempty"`
    26  }
    27  
    28  // GeoMapList represents the returned GTM GeoMap List body
    29  type GeoMapList struct {
    30  	GeoMapItems []*GeoMap `json:"items"`
    31  }
    32  
    33  // NewGeoMap creates a new GeoMap object
    34  func NewGeoMap(name string) *GeoMap {
    35  	geomap := &GeoMap{Name: name}
    36  	return geomap
    37  }
    38  
    39  // ListGeoMap retreieves all GeoMaps
    40  func ListGeoMaps(domainName string) ([]*GeoMap, error) {
    41  	geos := &GeoMapList{}
    42  	req, err := client.NewRequest(
    43  		Config,
    44  		"GET",
    45  		fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps", domainName),
    46  		nil,
    47  	)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  
    52  	setVersionHeader(req, schemaVersion)
    53  
    54  	printHttpRequest(req, true)
    55  
    56  	res, err := client.Do(Config, req)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	printHttpResponse(res, true)
    62  
    63  	if client.IsError(res) && res.StatusCode != 404 {
    64  		return nil, client.NewAPIError(res)
    65  	} else if res.StatusCode == 404 {
    66  		return nil, CommonError{entityName: "geoMap"}
    67  	}
    68  	err = client.BodyJSON(res, geos)
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  
    73  	return geos.GeoMapItems, nil
    74  
    75  }
    76  
    77  // GetGeoMap retrieves a GeoMap with the given name.
    78  func GetGeoMap(name, domainName string) (*GeoMap, error) {
    79  	geo := NewGeoMap(name)
    80  
    81  	req, err := client.NewRequest(
    82  		Config,
    83  		"GET",
    84  		fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps/%s", domainName, name),
    85  		nil,
    86  	)
    87  	if err != nil {
    88  		return nil, err
    89  	}
    90  
    91  	setVersionHeader(req, schemaVersion)
    92  
    93  	printHttpRequest(req, true)
    94  
    95  	res, err := client.Do(Config, req)
    96  	if err != nil {
    97  		return nil, err
    98  	}
    99  
   100  	printHttpResponse(res, true)
   101  
   102  	if client.IsError(res) && res.StatusCode != 404 {
   103  		return nil, client.NewAPIError(res)
   104  	} else if res.StatusCode == 404 {
   105  		return nil, CommonError{entityName: "GeographicMap", name: name}
   106  	} else {
   107  		err = client.BodyJSON(res, geo)
   108  		if err != nil {
   109  			return nil, err
   110  		}
   111  
   112  		return geo, nil
   113  	}
   114  }
   115  
   116  // Instantiate new Assignment struct
   117  func (geo *GeoMap) NewAssignment(dcID int, nickname string) *GeoAssignment {
   118  	geoAssign := &GeoAssignment{}
   119  	geoAssign.DatacenterId = dcID
   120  	geoAssign.Nickname = nickname
   121  
   122  	return geoAssign
   123  
   124  }
   125  
   126  // Instantiate new Default Datacenter Struct
   127  func (geo *GeoMap) NewDefaultDatacenter(dcID int) *DatacenterBase {
   128  	return &DatacenterBase{DatacenterId: dcID}
   129  }
   130  
   131  // Create GeoMap in provided domain
   132  func (geo *GeoMap) Create(domainName string) (*GeoMapResponse, error) {
   133  
   134  	// Use common code. Any specific validation needed?
   135  
   136  	return geo.save(domainName)
   137  
   138  }
   139  
   140  // Update GeoMap in given domain
   141  func (geo *GeoMap) Update(domainName string) (*ResponseStatus, error) {
   142  
   143  	// common code
   144  
   145  	stat, err := geo.save(domainName)
   146  	if err != nil {
   147  		return nil, err
   148  	}
   149  	return stat.Status, err
   150  
   151  }
   152  
   153  // Save GeoMap in given domain. Common path for Create and Update.
   154  func (geo *GeoMap) save(domainName string) (*GeoMapResponse, error) {
   155  
   156  	req, err := client.NewJSONRequest(
   157  		Config,
   158  		"PUT",
   159  		fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps/%s", domainName, geo.Name),
   160  		geo,
   161  	)
   162  	if err != nil {
   163  		return nil, err
   164  	}
   165  
   166  	setVersionHeader(req, schemaVersion)
   167  
   168  	printHttpRequest(req, true)
   169  
   170  	res, err := client.Do(Config, req)
   171  
   172  	// Network error
   173  	if err != nil {
   174  		return nil, CommonError{
   175  			entityName:       "geographicMap",
   176  			name:             geo.Name,
   177  			httpErrorMessage: err.Error(),
   178  			err:              err,
   179  		}
   180  	}
   181  
   182  	printHttpResponse(res, true)
   183  
   184  	// API error
   185  	if client.IsError(res) {
   186  		err := client.NewAPIError(res)
   187  		return nil, CommonError{entityName: "geographicMap", name: geo.Name, apiErrorMessage: err.Detail, err: err}
   188  	}
   189  
   190  	responseBody := &GeoMapResponse{}
   191  	// Unmarshall whole response body for updated entity and in case want status
   192  	err = client.BodyJSON(res, responseBody)
   193  	if err != nil {
   194  		return nil, err
   195  	}
   196  
   197  	return responseBody, nil
   198  }
   199  
   200  // Delete GeoMap method
   201  func (geo *GeoMap) Delete(domainName string) (*ResponseStatus, error) {
   202  
   203  	req, err := client.NewRequest(
   204  		Config,
   205  		"DELETE",
   206  		fmt.Sprintf("/config-gtm/v1/domains/%s/geographic-maps/%s", domainName, geo.Name),
   207  		nil,
   208  	)
   209  	if err != nil {
   210  		return nil, err
   211  	}
   212  
   213  	setVersionHeader(req, schemaVersion)
   214  
   215  	printHttpRequest(req, true)
   216  
   217  	res, err := client.Do(Config, req)
   218  	if err != nil {
   219  		return nil, err
   220  	}
   221  
   222  	// Network error
   223  	if err != nil {
   224  		return nil, CommonError{
   225  			entityName:       "geographicMap",
   226  			name:             geo.Name,
   227  			httpErrorMessage: err.Error(),
   228  			err:              err,
   229  		}
   230  	}
   231  
   232  	printHttpResponse(res, true)
   233  
   234  	// API error
   235  	if client.IsError(res) {
   236  		err := client.NewAPIError(res)
   237  		return nil, CommonError{entityName: "geographicMap", name: geo.Name, apiErrorMessage: err.Detail, err: err}
   238  	}
   239  
   240  	responseBody := &ResponseBody{}
   241  	// Unmarshall whole response body in case want status
   242  	err = client.BodyJSON(res, responseBody)
   243  	if err != nil {
   244  		return nil, err
   245  	}
   246  
   247  	return responseBody.Status, nil
   248  }