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

     1  package clientlists
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	"github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/edgegriderr"
     9  	validation "github.com/go-ozzo/ozzo-validation/v4"
    10  )
    11  
    12  type (
    13  	// Activation interface to support activating client lists.
    14  	Activation interface {
    15  		// GetActivation retrieves details of a specified activation ID.
    16  		//
    17  		// See: https://techdocs.akamai.com/client-lists/reference/get-retrieve-activation-status
    18  		GetActivation(ctx context.Context, params GetActivationRequest) (*GetActivationResponse, error)
    19  
    20  		// GetActivationStatus retrieves activation status for a client list in a network environment.
    21  		//
    22  		// See: https://techdocs.akamai.com/client-lists/reference/get-activation-status
    23  		GetActivationStatus(ctx context.Context, params GetActivationStatusRequest) (*GetActivationStatusResponse, error)
    24  
    25  		// CreateActivation activates a client list
    26  		//
    27  		// See: https://techdocs.akamai.com/client-lists/reference/post-activate-list
    28  		CreateActivation(ctx context.Context, params CreateActivationRequest) (*CreateActivationResponse, error)
    29  	}
    30  
    31  	// ActivationParams contains activation general parameters
    32  	ActivationParams struct {
    33  		Action                 ActivationAction  `json:"action"`
    34  		Comments               string            `json:"comments"`
    35  		Network                ActivationNetwork `json:"network"`
    36  		NotificationRecipients []string          `json:"notificationRecipients"`
    37  		SiebelTicketID         string            `json:"siebelTicketId"`
    38  	}
    39  
    40  	// GetActivationRequest contains activation request param
    41  	GetActivationRequest struct {
    42  		ActivationID int64
    43  	}
    44  
    45  	// GetActivationResponse contains activation details
    46  	GetActivationResponse struct {
    47  		ActivationID      int64            `json:"activationId"`
    48  		CreateDate        string           `json:"createDate"`
    49  		CreatedBy         string           `json:"createdBy"`
    50  		Fast              bool             `json:"fast"`
    51  		InitialActivation bool             `json:"initialActivation"`
    52  		ActivationStatus  ActivationStatus `json:"activationStatus"`
    53  		ListID            string           `json:"listId"`
    54  		Version           int64            `json:"version"`
    55  		ActivationParams
    56  	}
    57  
    58  	// CreateActivationRequest contains activation request parameters for CreateActivation method
    59  	CreateActivationRequest struct {
    60  		ListID string
    61  		ActivationParams
    62  	}
    63  
    64  	// CreateActivationResponse contains activation response
    65  	CreateActivationResponse GetActivationStatusResponse
    66  
    67  	// GetActivationStatusRequest contains request params for GetActivationStatus
    68  	GetActivationStatusRequest struct {
    69  		ListID  string
    70  		Network ActivationNetwork
    71  	}
    72  
    73  	// GetActivationStatusResponse contains activation status response
    74  	GetActivationStatusResponse struct {
    75  		Action                 ActivationAction  `json:"action"`
    76  		ActivationID           int64             `json:"activationId"`
    77  		ActivationStatus       ActivationStatus  `json:"activationStatus"`
    78  		Comments               string            `json:"comments"`
    79  		CreateDate             string            `json:"createDate"`
    80  		CreatedBy              string            `json:"createdBy"`
    81  		ListID                 string            `json:"listId"`
    82  		Network                ActivationNetwork `json:"network"`
    83  		NotificationRecipients []string          `json:"notificationRecipients"`
    84  		SiebelTicketID         string            `json:"siebelTicketId"`
    85  		Version                int64             `json:"version"`
    86  	}
    87  
    88  	// ActivationNetwork is a type for network field
    89  	ActivationNetwork string
    90  
    91  	// ActivationStatus is a type for activationStatus field
    92  	ActivationStatus string
    93  
    94  	// ActivationAction is a type for action field
    95  	ActivationAction string
    96  )
    97  
    98  const (
    99  	// Staging activation network value STAGING
   100  	Staging ActivationNetwork = "STAGING"
   101  	// Production activation network value PRODUCTION
   102  	Production ActivationNetwork = "PRODUCTION"
   103  
   104  	// Inactive activation status value INACTIVE
   105  	Inactive ActivationStatus = "INACTIVE"
   106  	// PendingActivation activation status value PENDING_ACTIVATION
   107  	PendingActivation ActivationStatus = "PENDING_ACTIVATION"
   108  	// Active activation status value ACTIVE
   109  	Active ActivationStatus = "ACTIVE"
   110  	// Modified activation status value MODIFIED
   111  	Modified ActivationStatus = "MODIFIED"
   112  	// PendingDeactivation activation status value PENDING_DEACTIVATION
   113  	PendingDeactivation ActivationStatus = "PENDING_DEACTIVATION"
   114  	// Failed activation status value FAILED
   115  	Failed ActivationStatus = "FAILED"
   116  
   117  	// Activate action value ACTIVATE
   118  	Activate ActivationAction = "ACTIVATE"
   119  )
   120  
   121  func (v GetActivationRequest) validate() error {
   122  	return edgegriderr.ParseValidationErrors(validation.Errors{
   123  		"ActivationID": validation.Validate(v.ActivationID, validation.Required),
   124  	})
   125  }
   126  
   127  func (v GetActivationStatusRequest) validate() error {
   128  	return edgegriderr.ParseValidationErrors(validation.Errors{
   129  		"ListID": validation.Validate(v.ListID, validation.Required),
   130  		"Network": validation.Validate(v.Network,
   131  			validation.Required,
   132  			validation.In(Staging, Production),
   133  		),
   134  	})
   135  }
   136  
   137  func (v CreateActivationRequest) validate() error {
   138  	return edgegriderr.ParseValidationErrors(validation.Errors{
   139  		"ListID": validation.Validate(v.ListID, validation.Required),
   140  		"Network": validation.Validate(v.Network,
   141  			validation.Required,
   142  			validation.In(Staging, Production),
   143  		),
   144  	})
   145  }
   146  
   147  func (p *clientlists) CreateActivation(ctx context.Context, params CreateActivationRequest) (*CreateActivationResponse, error) {
   148  	logger := p.Log(ctx)
   149  	logger.Debug("Create Activation")
   150  
   151  	if err := params.validate(); err != nil {
   152  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   153  	}
   154  
   155  	uri := fmt.Sprintf("/client-list/v1/lists/%s/activations", params.ListID)
   156  
   157  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri, nil)
   158  	if err != nil {
   159  		return nil, fmt.Errorf("create 'create activation' request failed: %s", err.Error())
   160  	}
   161  
   162  	var rval CreateActivationResponse
   163  
   164  	resp, err := p.Exec(req, &rval, params.ActivationParams)
   165  	if err != nil {
   166  		return nil, fmt.Errorf("create activation request failed: %s", err.Error())
   167  	}
   168  
   169  	if resp.StatusCode != http.StatusOK {
   170  		return nil, p.Error(resp)
   171  	}
   172  
   173  	return &rval, nil
   174  }
   175  
   176  func (p *clientlists) GetActivationStatus(ctx context.Context, params GetActivationStatusRequest) (*GetActivationStatusResponse, error) {
   177  	logger := p.Log(ctx)
   178  	logger.Debug("Get Activation Status")
   179  
   180  	if err := params.validate(); err != nil {
   181  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   182  	}
   183  
   184  	uri := fmt.Sprintf("/client-list/v1/lists/%s/environments/%s/status", params.ListID, params.Network)
   185  
   186  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   187  	if err != nil {
   188  		return nil, fmt.Errorf("create get activation status request failed: %s", err.Error())
   189  	}
   190  
   191  	var rval GetActivationStatusResponse
   192  
   193  	resp, err := p.Exec(req, &rval, params)
   194  	if err != nil {
   195  		return nil, fmt.Errorf("get activation status request failed: %s", err.Error())
   196  	}
   197  
   198  	if resp.StatusCode != http.StatusOK {
   199  		return nil, p.Error(resp)
   200  	}
   201  
   202  	return &rval, nil
   203  }
   204  
   205  func (p *clientlists) GetActivation(ctx context.Context, params GetActivationRequest) (*GetActivationResponse, error) {
   206  	logger := p.Log(ctx)
   207  	logger.Debug("Get Activation")
   208  
   209  	if err := params.validate(); err != nil {
   210  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   211  	}
   212  
   213  	uri := fmt.Sprintf("/client-list/v1/activations/%d", params.ActivationID)
   214  
   215  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   216  	if err != nil {
   217  		return nil, fmt.Errorf("create get activation request failed: %s", err.Error())
   218  	}
   219  
   220  	var rval GetActivationResponse
   221  
   222  	resp, err := p.Exec(req, &rval, params)
   223  	if err != nil {
   224  		return nil, fmt.Errorf("get activation request failed: %s", err.Error())
   225  	}
   226  
   227  	if resp.StatusCode != http.StatusOK {
   228  		return nil, p.Error(resp)
   229  	}
   230  
   231  	return &rval, nil
   232  }