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 }