github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/apigw/v2/api/GetApiHistory.go (about)

     1  package api
     2  
     3  import (
     4  	"bytes"
     5  
     6  	golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
     7  	"github.com/opentelekomcloud/gophertelekomcloud/internal/extract"
     8  	"github.com/opentelekomcloud/gophertelekomcloud/pagination"
     9  )
    10  
    11  type ListHistoryOpts struct {
    12  	Offset  int64  `q:"offset"`
    13  	Limit   int    `q:"limit"`
    14  	EnvID   string `q:"env_id"`
    15  	EnvName string `q:"env_name"`
    16  }
    17  
    18  func GetHistory(client *golangsdk.ServiceClient, gatewayID, apiID string, opts ListHistoryOpts) ([]VersionResp, error) {
    19  	url, err := golangsdk.NewURLBuilder().
    20  		WithEndpoints("apigw", "instances", gatewayID, "apis", "publish", apiID).
    21  		WithQueryParams(&opts).Build()
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  	pages, err := pagination.Pager{
    26  		Client:     client,
    27  		InitialURL: client.ServiceURL(url.String()),
    28  		CreatePage: func(r pagination.NewPageResult) pagination.NewPage {
    29  			return VersionPage{NewSinglePageBase: pagination.NewSinglePageBase{NewPageResult: r}}
    30  		},
    31  	}.NewAllPages()
    32  
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  	return ExtractVersions(pages)
    37  }
    38  
    39  type VersionPage struct {
    40  	pagination.NewSinglePageBase
    41  }
    42  
    43  func ExtractVersions(r pagination.NewPage) ([]VersionResp, error) {
    44  	var s struct {
    45  		Versions []VersionResp `json:"api_versions"`
    46  	}
    47  	err := extract.Into(bytes.NewReader((r.(VersionPage)).Body), &s)
    48  	return s.Versions, err
    49  }
    50  
    51  type VersionResp struct {
    52  	VersionID   string `json:"version_id"`
    53  	Version     string `json:"version_no"`
    54  	ApiID       string `json:"api_id"`
    55  	EnvID       string `json:"env_id"`
    56  	EnvName     string `json:"env_name"`
    57  	Description string `json:"remark"`
    58  	PublishTime string `json:"publish_time"`
    59  	Status      int    `json:"status"`
    60  }