github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/cloudlets/v3/policy_property.go (about)

     1  package v3
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"fmt"
     7  	"net/http"
     8  	"net/url"
     9  	"strconv"
    10  
    11  	"github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/edgegriderr"
    12  	validation "github.com/go-ozzo/ozzo-validation/v4"
    13  )
    14  
    15  type (
    16  	// ListActivePolicyPropertiesRequest contains request parameters for ListActivePolicyProperties
    17  	ListActivePolicyPropertiesRequest struct {
    18  		PolicyID int64
    19  		Page     int
    20  		Size     int
    21  	}
    22  
    23  	// ListActivePolicyPropertiesResponse contains the response data from ListActivePolicyProperties operation.
    24  	ListActivePolicyPropertiesResponse struct {
    25  		Page             Page                       `json:"page"`
    26  		PolicyProperties []ListPolicyPropertiesItem `json:"content"`
    27  		Links            []Link                     `json:"links"`
    28  	}
    29  
    30  	// ListPolicyPropertiesItem represents associated active properties information.
    31  	ListPolicyPropertiesItem struct {
    32  		GroupID       int64   `json:"groupId"`
    33  		ID            int64   `json:"id"`
    34  		Name          string  `json:"name"`
    35  		Network       Network `json:"network"`
    36  		PolicyVersion int64   `json:"version"`
    37  	}
    38  
    39  	// Link represents hypermedia link to help navigate through the result set.
    40  	Link struct {
    41  		Href string `json:"href"`
    42  		Rel  string `json:"rel"`
    43  	}
    44  
    45  	// Page contains informational data about pagination.
    46  	Page struct {
    47  		Number        int `json:"number"`
    48  		Size          int `json:"size"`
    49  		TotalElements int `json:"totalElements"`
    50  		TotalPages    int `json:"totalPages"`
    51  	}
    52  )
    53  
    54  var (
    55  	// ErrListActivePolicyProperties is returned when ListActivePolicyProperties fails.
    56  	ErrListActivePolicyProperties = errors.New("list active policy properties")
    57  )
    58  
    59  // Validate validates ListActivePolicyPropertiesRequest.
    60  func (r ListActivePolicyPropertiesRequest) Validate() error {
    61  	return edgegriderr.ParseValidationErrors(validation.Errors{
    62  		"PolicyID": validation.Validate(r.PolicyID, validation.Required),
    63  		"Page":     validation.Validate(r.Page, validation.Min(0)),
    64  		"Size":     validation.Validate(r.Size, validation.Min(10)),
    65  	})
    66  }
    67  
    68  func (c *cloudlets) ListActivePolicyProperties(ctx context.Context, params ListActivePolicyPropertiesRequest) (*ListActivePolicyPropertiesResponse, error) {
    69  	logger := c.Log(ctx)
    70  	logger.Debug("ListActivePolicyProperties")
    71  
    72  	if err := params.Validate(); err != nil {
    73  		return nil, fmt.Errorf("%s: %w: %s", ErrListActivePolicyProperties, ErrStructValidation, err)
    74  	}
    75  
    76  	uri, err := url.Parse(fmt.Sprintf("/cloudlets/v3/policies/%d/properties", params.PolicyID))
    77  	if err != nil {
    78  		return nil, fmt.Errorf("%w: failed to parse url: %s", ErrListActivePolicyProperties, err)
    79  	}
    80  
    81  	q := uri.Query()
    82  	if params.Page != 0 {
    83  		q.Add("page", strconv.Itoa(params.Page))
    84  	}
    85  	if params.Size != 0 {
    86  		q.Add("size", strconv.Itoa(params.Size))
    87  	}
    88  	uri.RawQuery = q.Encode()
    89  
    90  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri.String(), nil)
    91  	if err != nil {
    92  		return nil, fmt.Errorf("%w: failed to create request: %s", ErrListActivePolicyProperties, err)
    93  	}
    94  
    95  	var result ListActivePolicyPropertiesResponse
    96  	resp, err := c.Exec(req, &result)
    97  	if err != nil {
    98  		return nil, fmt.Errorf("%w: request failed: %s", ErrListActivePolicyProperties, err)
    99  	}
   100  
   101  	if resp.StatusCode != http.StatusOK {
   102  		return nil, fmt.Errorf("%s: %w", ErrListActivePolicyProperties, c.Error(resp))
   103  	}
   104  
   105  	return &result, nil
   106  }