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 }