github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/dds/v3/roles/requests.go (about)

     1  package roles
     2  
     3  import (
     4  	"github.com/chnsz/golangsdk"
     5  	"github.com/chnsz/golangsdk/pagination"
     6  )
     7  
     8  var requestOpts = golangsdk.RequestOpts{
     9  	MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
    10  }
    11  
    12  // CreateOpts is the structure required by the Create method to create a new database role.
    13  type CreateOpts struct {
    14  	// Role name.
    15  	// The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots.
    16  	Name string `json:"role_name" required:"true"`
    17  	// The name of the database where the role is located.
    18  	// The length is 1~64 bits and can contain letters, numbers and underscores.
    19  	DbName string `json:"db_name,omitempty"`
    20  	// List of roles inherited by the newly created role.
    21  	Roles []Role `json:"roles,omitempty"`
    22  }
    23  
    24  // Role is the object that represent the role details.
    25  type Role struct {
    26  	// Role name.
    27  	// The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots.
    28  	Name string `json:"role_name" required:"true"`
    29  	// The name of the database where the role is located.
    30  	// The length is 1~64 bits and can contain letters, numbers and underscores.
    31  	DbName string `json:"role_db_name" required:"true"`
    32  }
    33  
    34  // Create is a method to create a new database role using given parameters.
    35  func Create(c *golangsdk.ServiceClient, instanceId string, opts CreateOpts) error {
    36  	b, err := golangsdk.BuildRequestBody(opts, "")
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	_, err = c.Post(rootURL(c, instanceId), b, nil, &golangsdk.RequestOpts{
    42  		MoreHeaders: requestOpts.MoreHeaders,
    43  	})
    44  	return err
    45  }
    46  
    47  // ListOpts allows to filter list data using given parameters.
    48  type ListOpts struct {
    49  	// Role name.
    50  	// The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots.
    51  	Name string `q:"role_name"`
    52  	// The name of the database where the role is located.
    53  	// The length is 1~64 bits and can contain letters, numbers and underscores.
    54  	DbName string `q:"db_name"`
    55  	// The offset number.
    56  	// Default value: 0.
    57  	Offset int `q:"offset"`
    58  	// Number of records to be queried.
    59  	// Value range: 0–100.
    60  	// Default value: 100, indicating that a maximum of 1000 records can be queried and all records are displayed on
    61  	// the same page.
    62  	Limit int `q:"limit"`
    63  }
    64  
    65  // List is a method to query the list of the database roles using given opts.
    66  func List(c *golangsdk.ServiceClient, instanceId string, opts ListOpts) ([]RoleResp, error) {
    67  	url := resourceURL(c, instanceId)
    68  	query, err := golangsdk.BuildQueryString(opts)
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  	url += query.String()
    73  
    74  	var result []RoleResp
    75  	err = pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
    76  		p := RolePage{pagination.OffsetPageBase{PageResult: r}}
    77  		return p
    78  	}).EachPage(func(page pagination.Page) (bool, error) {
    79  		resp, err := ExtractRoles(page)
    80  		if err != nil {
    81  			return false, err
    82  		}
    83  		if len(resp) == 0 {
    84  			return false, nil
    85  		}
    86  		result = append(result, resp...)
    87  		return true, nil
    88  	})
    89  	if err != nil {
    90  		return nil, err
    91  	}
    92  	return result, err
    93  }
    94  
    95  // DeleteOpts is the structure required by the Delete method to remove an existing database role.
    96  type DeleteOpts struct {
    97  	// Role name.
    98  	// The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots.
    99  	Name string `json:"role_name" required:"true"`
   100  	// The name of the database where the role is located.
   101  	// The length is 1~64 bits and can contain letters, numbers and underscores.
   102  	DbName string `json:"db_name" required:"true"`
   103  }
   104  
   105  // Delete is a method to remove an existing database role.
   106  func Delete(c *golangsdk.ServiceClient, instanceId string, opts DeleteOpts) error {
   107  	url := rootURL(c, instanceId)
   108  	b, err := golangsdk.BuildRequestBody(opts, "")
   109  	if err != nil {
   110  		return err
   111  	}
   112  
   113  	_, err = c.DeleteWithBody(url, b, &golangsdk.RequestOpts{
   114  		MoreHeaders: requestOpts.MoreHeaders,
   115  	})
   116  	return err
   117  }