github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/edgeworkers/edgeworker_id.go (about)

     1  package edgeworkers
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"fmt"
     7  	"net/http"
     8  	"net/url"
     9  
    10  	validation "github.com/go-ozzo/ozzo-validation/v4"
    11  )
    12  
    13  type (
    14  	// EdgeWorkerIDs is EdgeWorker ID API interface
    15  	EdgeWorkerIDs interface {
    16  		// GetEdgeWorkerID gets details for a specific EdgeWorkerID
    17  		//
    18  		// See: https://techdocs.akamai.com/edgeworkers/reference/get-id
    19  		GetEdgeWorkerID(context.Context, GetEdgeWorkerIDRequest) (*EdgeWorkerID, error)
    20  
    21  		// ListEdgeWorkersID lists EdgeWorkerIDs in the identified group
    22  		//
    23  		// See: https://techdocs.akamai.com/edgeworkers/reference/get-ids
    24  		ListEdgeWorkersID(context.Context, ListEdgeWorkersIDRequest) (*ListEdgeWorkersIDResponse, error)
    25  
    26  		// CreateEdgeWorkerID creates a new EdgeWorkerID
    27  		//
    28  		// See: https://techdocs.akamai.com/edgeworkers/reference/post-ids
    29  		CreateEdgeWorkerID(context.Context, CreateEdgeWorkerIDRequest) (*EdgeWorkerID, error)
    30  
    31  		// UpdateEdgeWorkerID updates an EdgeWorkerID
    32  		//
    33  		// See: https://techdocs.akamai.com/edgeworkers/reference/put-id
    34  		UpdateEdgeWorkerID(context.Context, UpdateEdgeWorkerIDRequest) (*EdgeWorkerID, error)
    35  
    36  		// CloneEdgeWorkerID clones an EdgeWorkerID to change the resource tier
    37  		//
    38  		// See: https://techdocs.akamai.com/edgeworkers/reference/post-id-clone
    39  		CloneEdgeWorkerID(context.Context, CloneEdgeWorkerIDRequest) (*EdgeWorkerID, error)
    40  
    41  		// DeleteEdgeWorkerID deletes an EdgeWorkerID
    42  		//
    43  		// See: https://techdocs.akamai.com/edgeworkers/reference/delete-id
    44  		DeleteEdgeWorkerID(context.Context, DeleteEdgeWorkerIDRequest) error
    45  	}
    46  
    47  	// GetEdgeWorkerIDRequest contains parameters used to get an EdgeWorkerID
    48  	GetEdgeWorkerIDRequest struct {
    49  		EdgeWorkerID int
    50  	}
    51  
    52  	// DeleteEdgeWorkerIDRequest contains parameters used to delete an EdgeWorkerID
    53  	DeleteEdgeWorkerIDRequest struct {
    54  		EdgeWorkerID int
    55  	}
    56  
    57  	// EdgeWorkerID represents an EdgeWorkerID object
    58  	EdgeWorkerID struct {
    59  		EdgeWorkerID       int    `json:"edgeWorkerId"`
    60  		Name               string `json:"name"`
    61  		AccountID          string `json:"accountId"`
    62  		GroupID            int64  `json:"groupId"`
    63  		ResourceTierID     int    `json:"resourceTierId"`
    64  		SourceEdgeWorkerID int    `json:"sourceEdgeWorkerId,omitempty"`
    65  		CreatedBy          string `json:"createdBy"`
    66  		CreatedTime        string `json:"createdTime"`
    67  		LastModifiedBy     string `json:"lastModifiedBy"`
    68  		LastModifiedTime   string `json:"lastModifiedTime"`
    69  	}
    70  
    71  	// ListEdgeWorkersIDRequest contains query parameters used to list EdgeWorkerIDs
    72  	ListEdgeWorkersIDRequest struct {
    73  		GroupID        int
    74  		ResourceTierID int
    75  	}
    76  
    77  	// ListEdgeWorkersIDResponse represents a response object returned by ListEdgeWorkersID
    78  	ListEdgeWorkersIDResponse struct {
    79  		EdgeWorkers []EdgeWorkerID `json:"edgeWorkerIds"`
    80  	}
    81  
    82  	// CreateEdgeWorkerIDRequest contains body parameters used to create EdgeWorkerID
    83  	CreateEdgeWorkerIDRequest struct {
    84  		Name           string `json:"name"`
    85  		GroupID        int    `json:"groupId"`
    86  		ResourceTierID int    `json:"resourceTierId"`
    87  	}
    88  
    89  	// EdgeWorkerIDBodyRequest contains body parameters used to update or clone EdgeWorkerID
    90  	EdgeWorkerIDBodyRequest struct {
    91  		Name           string `json:"name"`
    92  		GroupID        int    `json:"groupId"`
    93  		ResourceTierID int    `json:"resourceTierId"`
    94  	}
    95  
    96  	// UpdateEdgeWorkerIDRequest contains body and path parameters used to update EdgeWorkerID
    97  	UpdateEdgeWorkerIDRequest struct {
    98  		EdgeWorkerIDBodyRequest
    99  		EdgeWorkerID int
   100  	}
   101  
   102  	// CloneEdgeWorkerIDRequest contains body and path parameters used to clone EdgeWorkerID
   103  	CloneEdgeWorkerIDRequest struct {
   104  		EdgeWorkerIDBodyRequest
   105  		EdgeWorkerID int
   106  	}
   107  )
   108  
   109  // Validate validates GetEdgeWorkerIDRequest
   110  func (g GetEdgeWorkerIDRequest) Validate() error {
   111  	return validation.Errors{
   112  		"EdgeWorkerID": validation.Validate(g.EdgeWorkerID, validation.Required),
   113  	}.Filter()
   114  }
   115  
   116  // Validate validates CreateEdgeWorkerIDRequest
   117  func (c CreateEdgeWorkerIDRequest) Validate() error {
   118  	return validation.Errors{
   119  		"Name":           validation.Validate(c.Name, validation.Required),
   120  		"GroupID":        validation.Validate(c.GroupID, validation.Required),
   121  		"ResourceTierID": validation.Validate(c.ResourceTierID, validation.Required),
   122  	}.Filter()
   123  }
   124  
   125  // Validate validates CreateEdgeWorkerIDRequest
   126  func (c UpdateEdgeWorkerIDRequest) Validate() error {
   127  	return validation.Errors{
   128  		"Name":           validation.Validate(c.EdgeWorkerIDBodyRequest.Name, validation.Required),
   129  		"GroupID":        validation.Validate(c.EdgeWorkerIDBodyRequest.GroupID, validation.Required),
   130  		"ResourceTierID": validation.Validate(c.EdgeWorkerIDBodyRequest.ResourceTierID, validation.Required),
   131  		"EdgeWorkerID":   validation.Validate(c.EdgeWorkerID, validation.Required),
   132  	}.Filter()
   133  }
   134  
   135  // Validate validates CloneEdgeWorkerIDRequest
   136  func (c CloneEdgeWorkerIDRequest) Validate() error {
   137  	return validation.Errors{
   138  		"Name":           validation.Validate(c.EdgeWorkerIDBodyRequest.Name, validation.Required),
   139  		"GroupID":        validation.Validate(c.EdgeWorkerIDBodyRequest.GroupID, validation.Required),
   140  		"ResourceTierID": validation.Validate(c.EdgeWorkerIDBodyRequest.ResourceTierID, validation.Required),
   141  		"EdgeWorkerID":   validation.Validate(c.EdgeWorkerID, validation.Required),
   142  	}.Filter()
   143  }
   144  
   145  // Validate validates DeleteEdgeWorkerIDRequest
   146  func (d DeleteEdgeWorkerIDRequest) Validate() error {
   147  	return validation.Errors{
   148  		"EdgeWorkerID": validation.Validate(d.EdgeWorkerID, validation.Required),
   149  	}.Filter()
   150  }
   151  
   152  var (
   153  	// ErrGetEdgeWorkerID is returned in case an error occurs on GetEdgeWorkerID operation
   154  	ErrGetEdgeWorkerID = errors.New("get an EdgeWorker ID")
   155  	// ErrListEdgeWorkersID is returned in case an error occurs on ListEdgeWorkersID operation
   156  	ErrListEdgeWorkersID = errors.New("list EdgeWorkers IDs")
   157  	// ErrCreateEdgeWorkerID is returned in case an error occurs on CreateEdgeWorkerID operation
   158  	ErrCreateEdgeWorkerID = errors.New("create an EdgeWorker ID")
   159  	// ErrUpdateEdgeWorkerID is returned in case an error occurs on UpdateEdgeWorkerID operation
   160  	ErrUpdateEdgeWorkerID = errors.New("update an EdgeWorker ID")
   161  	// ErrCloneEdgeWorkerID is returned in case an error occurs on CloneEdgeWroker operation
   162  	ErrCloneEdgeWorkerID = errors.New("clone an EdgeWorker ID")
   163  	// ErrDeleteEdgeWorkerID is returned in case an error occurs on DeleteEdgeWorkerID operation
   164  	ErrDeleteEdgeWorkerID = errors.New("delete an EdgeWorker ID")
   165  )
   166  
   167  func (e *edgeworkers) GetEdgeWorkerID(ctx context.Context, params GetEdgeWorkerIDRequest) (*EdgeWorkerID, error) {
   168  	logger := e.Log(ctx)
   169  	logger.Debug("GetEdgeWorkerID")
   170  
   171  	if err := params.Validate(); err != nil {
   172  		return nil, fmt.Errorf("%s: %w: %s", ErrGetEdgeWorkerID, ErrStructValidation, err)
   173  	}
   174  
   175  	uri := fmt.Sprintf("/edgeworkers/v1/ids/%d", params.EdgeWorkerID)
   176  
   177  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   178  	if err != nil {
   179  		return nil, fmt.Errorf("%w: failed to create request: %s", ErrGetEdgeWorkerID, err)
   180  	}
   181  
   182  	var result EdgeWorkerID
   183  	resp, err := e.Exec(req, &result)
   184  	if err != nil {
   185  		return nil, fmt.Errorf("%w: request failed: %s", ErrGetEdgeWorkerID, err)
   186  	}
   187  
   188  	if resp.StatusCode != http.StatusOK {
   189  		return nil, fmt.Errorf("%s: %w", ErrGetEdgeWorkerID, e.Error(resp))
   190  	}
   191  
   192  	return &result, nil
   193  }
   194  
   195  func (e *edgeworkers) ListEdgeWorkersID(ctx context.Context, params ListEdgeWorkersIDRequest) (*ListEdgeWorkersIDResponse, error) {
   196  	logger := e.Log(ctx)
   197  	logger.Debug("ListEdgeWorkersID")
   198  
   199  	uri, err := url.Parse("/edgeworkers/v1/ids")
   200  	if err != nil {
   201  		return nil, fmt.Errorf("%w: failed to parse url: %s", ErrListEdgeWorkersID, err)
   202  	}
   203  	q := uri.Query()
   204  	if params.GroupID != 0 {
   205  		q.Add("groupId", fmt.Sprintf("%d", params.GroupID))
   206  	}
   207  	if params.ResourceTierID != 0 {
   208  		q.Add("resourceTierId", fmt.Sprintf("%d", params.ResourceTierID))
   209  	}
   210  	uri.RawQuery = q.Encode()
   211  
   212  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri.String(), nil)
   213  	if err != nil {
   214  		return nil, fmt.Errorf("%w: failed to create request: %s", ErrListEdgeWorkersID, err)
   215  	}
   216  
   217  	var result ListEdgeWorkersIDResponse
   218  	resp, err := e.Exec(req, &result)
   219  	if err != nil {
   220  		return nil, fmt.Errorf("%w: request failed: %s", ErrListEdgeWorkersID, err)
   221  	}
   222  
   223  	if resp.StatusCode != http.StatusOK {
   224  		return nil, fmt.Errorf("%s: %w", ErrListEdgeWorkersID, e.Error(resp))
   225  	}
   226  
   227  	return &result, nil
   228  }
   229  
   230  func (e *edgeworkers) CreateEdgeWorkerID(ctx context.Context, params CreateEdgeWorkerIDRequest) (*EdgeWorkerID, error) {
   231  	logger := e.Log(ctx)
   232  	logger.Debug("CreateEdgeWorkerID")
   233  
   234  	if err := params.Validate(); err != nil {
   235  		return nil, fmt.Errorf("%s: %w:\n%s", ErrCreateEdgeWorkerID, ErrStructValidation, err)
   236  	}
   237  
   238  	uri, err := url.Parse("/edgeworkers/v1/ids")
   239  	if err != nil {
   240  		return nil, fmt.Errorf("%w: failed to parse url: %s", ErrCreateEdgeWorkerID, err)
   241  	}
   242  
   243  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri.String(), nil)
   244  	if err != nil {
   245  		return nil, fmt.Errorf("%w: failed to create request: %s", ErrCreateEdgeWorkerID, err)
   246  	}
   247  
   248  	var result EdgeWorkerID
   249  	resp, err := e.Exec(req, &result, params)
   250  	if err != nil {
   251  		return nil, fmt.Errorf("%w: request failed: %s", ErrCreateEdgeWorkerID, err)
   252  	}
   253  
   254  	if resp.StatusCode != http.StatusCreated {
   255  		return nil, fmt.Errorf("%s: %w", ErrCreateEdgeWorkerID, e.Error(resp))
   256  	}
   257  
   258  	return &result, nil
   259  }
   260  
   261  func (e *edgeworkers) UpdateEdgeWorkerID(ctx context.Context, params UpdateEdgeWorkerIDRequest) (*EdgeWorkerID, error) {
   262  	logger := e.Log(ctx)
   263  	logger.Debug("UpdateEdgeWorkerID")
   264  
   265  	if err := params.Validate(); err != nil {
   266  		return nil, fmt.Errorf("%s: %w:\n%s", ErrUpdateEdgeWorkerID, ErrStructValidation, err)
   267  	}
   268  
   269  	uri, err := url.Parse(fmt.Sprintf("/edgeworkers/v1/ids/%d", params.EdgeWorkerID))
   270  	if err != nil {
   271  		return nil, fmt.Errorf("%w: failed to parse url: %s", ErrUpdateEdgeWorkerID, err)
   272  	}
   273  
   274  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri.String(), nil)
   275  	if err != nil {
   276  		return nil, fmt.Errorf("%w: failed to create request: %s", ErrUpdateEdgeWorkerID, err)
   277  	}
   278  
   279  	var result EdgeWorkerID
   280  	resp, err := e.Exec(req, &result, params.EdgeWorkerIDBodyRequest)
   281  	if err != nil {
   282  		return nil, fmt.Errorf("%w: request failed: %s", ErrUpdateEdgeWorkerID, err)
   283  	}
   284  
   285  	if resp.StatusCode != http.StatusOK {
   286  		return nil, fmt.Errorf("%s: %w", ErrUpdateEdgeWorkerID, e.Error(resp))
   287  	}
   288  
   289  	return &result, nil
   290  }
   291  
   292  func (e *edgeworkers) CloneEdgeWorkerID(ctx context.Context, params CloneEdgeWorkerIDRequest) (*EdgeWorkerID, error) {
   293  	logger := e.Log(ctx)
   294  	logger.Debug("CloneEdgeWorkerID")
   295  
   296  	if err := params.Validate(); err != nil {
   297  		return nil, fmt.Errorf("%s: %w:\n%s", ErrCloneEdgeWorkerID, ErrStructValidation, err)
   298  	}
   299  
   300  	uri, err := url.Parse(fmt.Sprintf("/edgeworkers/v1/ids/%d/clone", params.EdgeWorkerID))
   301  	if err != nil {
   302  		return nil, fmt.Errorf("%w: failed to parse url: %s", ErrCloneEdgeWorkerID, err)
   303  	}
   304  
   305  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri.String(), nil)
   306  	if err != nil {
   307  		return nil, fmt.Errorf("%w: failed to create request: %s", ErrCloneEdgeWorkerID, err)
   308  	}
   309  
   310  	var result EdgeWorkerID
   311  	resp, err := e.Exec(req, &result, params.EdgeWorkerIDBodyRequest)
   312  	if err != nil {
   313  		return nil, fmt.Errorf("%w: request failed: %s", ErrCloneEdgeWorkerID, err)
   314  	}
   315  
   316  	if resp.StatusCode != http.StatusOK {
   317  		return nil, fmt.Errorf("%s: %w", ErrCloneEdgeWorkerID, e.Error(resp))
   318  	}
   319  
   320  	return &result, nil
   321  }
   322  
   323  func (e *edgeworkers) DeleteEdgeWorkerID(ctx context.Context, params DeleteEdgeWorkerIDRequest) error {
   324  	e.Log(ctx).Debug("DeleteEdgeWorkerID")
   325  
   326  	if err := params.Validate(); err != nil {
   327  		return fmt.Errorf("%s: %w:\n%s", ErrDeleteEdgeWorkerID, ErrStructValidation, err)
   328  	}
   329  
   330  	uri, err := url.Parse(fmt.Sprintf("/edgeworkers/v1/ids/%d", params.EdgeWorkerID))
   331  	if err != nil {
   332  		return fmt.Errorf("%w: failed to parse url: %s", ErrDeleteEdgeWorkerID, err)
   333  	}
   334  
   335  	req, err := http.NewRequestWithContext(ctx, http.MethodDelete, uri.String(), nil)
   336  	if err != nil {
   337  		return fmt.Errorf("%w: failed to create request: %s", ErrDeleteEdgeWorkerID, err)
   338  	}
   339  
   340  	resp, err := e.Exec(req, nil)
   341  	if err != nil {
   342  		return fmt.Errorf("%w: request failed: %s", ErrDeleteEdgeWorkerID, err)
   343  	}
   344  
   345  	if resp.StatusCode != http.StatusNoContent {
   346  		return fmt.Errorf("%s: %w", ErrDeleteEdgeWorkerID, e.Error(resp))
   347  	}
   348  
   349  	return nil
   350  }