github.com/pivotal-cf/go-pivnet/v6@v6.0.2/release_upgrade_paths.go (about) 1 package pivnet 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "net/http" 8 ) 9 10 type ReleaseUpgradePathsService struct { 11 client Client 12 } 13 14 type ReleaseUpgradePathsResponse struct { 15 ReleaseUpgradePaths []ReleaseUpgradePath `json:"upgrade_paths,omitempty"` 16 } 17 18 type ReleaseUpgradePath struct { 19 Release UpgradePathRelease `json:"release,omitempty" yaml:"release,omitempty"` 20 } 21 22 type UpgradePathRelease struct { 23 ID int `json:"id,omitempty" yaml:"id,omitempty"` 24 Version string `json:"version,omitempty" yaml:"version,omitempty"` 25 } 26 27 func (r ReleaseUpgradePathsService) Get(productSlug string, releaseID int) ([]ReleaseUpgradePath, error) { 28 url := fmt.Sprintf( 29 "/products/%s/releases/%d/upgrade_paths", 30 productSlug, 31 releaseID, 32 ) 33 34 var response ReleaseUpgradePathsResponse 35 resp, err := r.client.MakeRequest( 36 "GET", 37 url, 38 http.StatusOK, 39 nil, 40 ) 41 if err != nil { 42 return nil, err 43 } 44 defer resp.Body.Close() 45 46 err = json.NewDecoder(resp.Body).Decode(&response) 47 if err != nil { 48 return nil, err 49 } 50 51 return response.ReleaseUpgradePaths, nil 52 } 53 54 func (r ReleaseUpgradePathsService) Add( 55 productSlug string, 56 releaseID int, 57 previousReleaseID int, 58 ) error { 59 url := fmt.Sprintf( 60 "/products/%s/releases/%d/add_upgrade_path", 61 productSlug, 62 releaseID, 63 ) 64 65 body := addRemoveUpgradePathBody{ 66 UpgradePath: addRemoveUpgradePathBodyUpgradePath{ 67 ReleaseID: previousReleaseID, 68 }, 69 } 70 71 b, err := json.Marshal(body) 72 if err != nil { 73 // Untested as we cannot force an error because we are marshalling 74 // a known-good body 75 return err 76 } 77 78 resp, err := r.client.MakeRequest( 79 "PATCH", 80 url, 81 http.StatusNoContent, 82 bytes.NewReader(b), 83 ) 84 if err != nil { 85 return err 86 } 87 defer resp.Body.Close() 88 89 return nil 90 } 91 92 func (r ReleaseUpgradePathsService) Remove( 93 productSlug string, 94 releaseID int, 95 previousReleaseID int, 96 ) error { 97 url := fmt.Sprintf( 98 "/products/%s/releases/%d/remove_upgrade_path", 99 productSlug, 100 releaseID, 101 ) 102 103 body := addRemoveUpgradePathBody{ 104 UpgradePath: addRemoveUpgradePathBodyUpgradePath{ 105 ReleaseID: previousReleaseID, 106 }, 107 } 108 109 b, err := json.Marshal(body) 110 if err != nil { 111 // Untested as we cannot force an error because we are marshalling 112 // a known-good body 113 return err 114 } 115 116 resp, err := r.client.MakeRequest( 117 "PATCH", 118 url, 119 http.StatusNoContent, 120 bytes.NewReader(b), 121 ) 122 if err != nil { 123 return err 124 } 125 defer resp.Body.Close() 126 127 return nil 128 } 129 130 type addRemoveUpgradePathBody struct { 131 UpgradePath addRemoveUpgradePathBodyUpgradePath `json:"upgrade_path"` 132 } 133 134 type addRemoveUpgradePathBodyUpgradePath struct { 135 ReleaseID int `json:"release_id"` 136 }