github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/networklists/network_list_description.go (about) 1 package networklists 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 validation "github.com/go-ozzo/ozzo-validation/v4" 9 ) 10 11 type ( 12 // The NetworkListDescription interface supports retrieving and updating a network list's description. 13 NetworkListDescription interface { 14 // GetNetworkListDescription retrieves network list with description. 15 // 16 // See: https://techdocs.akamai.com/network-lists/reference/get-network-list 17 GetNetworkListDescription(ctx context.Context, params GetNetworkListDescriptionRequest) (*GetNetworkListDescriptionResponse, error) 18 19 // UpdateNetworkListDescription modifies network list description. 20 // 21 // See: https://techdocs.akamai.com/network-lists/reference/put-network-list-details 22 UpdateNetworkListDescription(ctx context.Context, params UpdateNetworkListDescriptionRequest) (*UpdateNetworkListDescriptionResponse, error) 23 } 24 25 // GetNetworkListDescriptionRequest contains request parameters for GetNetworkListDescription method 26 GetNetworkListDescriptionRequest struct { 27 UniqueID string `json:"uniqueId"` 28 Name string `json:"name"` 29 Description string `json:"description"` 30 } 31 32 // GetNetworkListDescriptionResponse contains response from GetNetworkListDescription method 33 GetNetworkListDescriptionResponse struct { 34 Name string `json:"name"` 35 UniqueID string `json:"uniqueId"` 36 Description string `json:"description"` 37 SyncPoint int `json:"syncPoint"` 38 Type string `json:"type"` 39 NetworkListType string `json:"networkListType"` 40 ElementCount int `json:"elementCount"` 41 ReadOnly bool `json:"readOnly"` 42 Shared bool `json:"shared"` 43 List []string `json:"list"` 44 Links struct { 45 ActivateInProduction struct { 46 Href string `json:"href"` 47 Method string `json:"method"` 48 } `json:"activateInProduction"` 49 ActivateInStaging struct { 50 Href string `json:"href"` 51 Method string `json:"method"` 52 } `json:"activateInStaging"` 53 AppendItems struct { 54 Href string `json:"href"` 55 Method string `json:"method"` 56 } `json:"appendItems"` 57 Retrieve struct { 58 Href string `json:"href"` 59 } `json:"retrieve"` 60 StatusInProduction struct { 61 Href string `json:"href"` 62 } `json:"statusInProduction"` 63 StatusInStaging struct { 64 Href string `json:"href"` 65 } `json:"statusInStaging"` 66 Update struct { 67 Href string `json:"href"` 68 Method string `json:"method"` 69 } `json:"update"` 70 } `json:"links"` 71 } 72 73 // UpdateNetworkListDescriptionRequest contains request parameters for UpdateNetworkListDescription method 74 UpdateNetworkListDescriptionRequest struct { 75 UniqueID string `json:"-"` 76 Name string `json:"name"` 77 Description string `json:"description"` 78 } 79 80 // UpdateNetworkListDescriptionResponse contains response from UpdateNetworkListDescription method 81 UpdateNetworkListDescriptionResponse struct { 82 Empty string `json:"-"` 83 } 84 ) 85 86 // Validate validates GetNetworkListDescriptionRequest 87 func (v GetNetworkListDescriptionRequest) Validate() error { 88 return validation.Errors{ 89 "UniqueID": validation.Validate(v.UniqueID, validation.Required), 90 }.Filter() 91 } 92 93 // Validate validates UpdateNetworkListDescriptionRequest 94 func (v UpdateNetworkListDescriptionRequest) Validate() error { 95 return validation.Errors{ 96 "UniqueID": validation.Validate(v.UniqueID, validation.Required), 97 }.Filter() 98 } 99 100 func (p *networklists) GetNetworkListDescription(ctx context.Context, params GetNetworkListDescriptionRequest) (*GetNetworkListDescriptionResponse, error) { 101 if err := params.Validate(); err != nil { 102 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 103 } 104 105 logger := p.Log(ctx) 106 logger.Debug("GetNetworkListDescription") 107 108 var rval GetNetworkListDescriptionResponse 109 110 uri := fmt.Sprintf( 111 "/network-list/v2/network-lists/%s", 112 params.UniqueID) 113 114 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 115 if err != nil { 116 return nil, fmt.Errorf("failed to create getnetworklistdescription request: %s", err.Error()) 117 } 118 119 resp, err := p.Exec(req, &rval) 120 if err != nil { 121 return nil, fmt.Errorf("getnetworklistdescription request failed: %s", err.Error()) 122 } 123 124 if resp.StatusCode != http.StatusOK { 125 return nil, p.Error(resp) 126 } 127 128 return &rval, nil 129 130 } 131 132 func (p *networklists) UpdateNetworkListDescription(ctx context.Context, params UpdateNetworkListDescriptionRequest) (*UpdateNetworkListDescriptionResponse, error) { 133 if err := params.Validate(); err != nil { 134 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 135 } 136 137 logger := p.Log(ctx) 138 logger.Debug("UpdateNetworkListDescription") 139 140 putURL := fmt.Sprintf( 141 "/network-list/v2/network-lists/%s/details", 142 params.UniqueID, 143 ) 144 145 req, err := http.NewRequestWithContext(ctx, http.MethodPut, putURL, nil) 146 if err != nil { 147 return nil, fmt.Errorf("failed to create create NetworkListDescriptionrequest: %s", err.Error()) 148 } 149 150 var rval UpdateNetworkListDescriptionResponse 151 resp, err := p.Exec(req, &rval, params) 152 if err != nil { 153 return nil, fmt.Errorf("create NetworkListDescription request failed: %s", err.Error()) 154 } 155 156 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusNoContent { 157 return nil, p.Error(resp) 158 } 159 160 return &rval, nil 161 }