database.go raw

   1  package govultr
   2  
   3  import (
   4  	"context"
   5  	"fmt"
   6  	"net/http"
   7  
   8  	"github.com/google/go-querystring/query"
   9  )
  10  
  11  const databasePath = "/v2/databases"
  12  
  13  // DatabaseService is the interface to interact with the Database endpoints on the Vultr API
  14  // Link: https://www.vultr.com/api/#tag/managed-databases
  15  type DatabaseService interface {
  16  	ListPlans(ctx context.Context, options *DBPlanListOptions) ([]DatabasePlan, *Meta, *http.Response, error)
  17  
  18  	List(ctx context.Context, options *DBListOptions) ([]Database, *Meta, *http.Response, error)
  19  	Create(ctx context.Context, databaseReq *DatabaseCreateReq) (*Database, *http.Response, error)
  20  	Get(ctx context.Context, databaseID string) (*Database, *http.Response, error)
  21  	Update(ctx context.Context, databaseID string, databaseReq *DatabaseUpdateReq) (*Database, *http.Response, error)
  22  	Delete(ctx context.Context, databaseID string) error
  23  
  24  	GetUsage(ctx context.Context, databaseID string) (*DatabaseUsage, *http.Response, error)
  25  
  26  	ListUsers(ctx context.Context, databaseID string) ([]DatabaseUser, *Meta, *http.Response, error)
  27  	CreateUser(ctx context.Context, databaseID string, databaseUserReq *DatabaseUserCreateReq) (*DatabaseUser, *http.Response, error)
  28  	GetUser(ctx context.Context, databaseID string, username string) (*DatabaseUser, *http.Response, error)
  29  	UpdateUser(ctx context.Context, databaseID string, username string, databaseUserReq *DatabaseUserUpdateReq) (*DatabaseUser, *http.Response, error) //nolint:lll
  30  	DeleteUser(ctx context.Context, databaseID string, username string) error
  31  	UpdateUserACL(ctx context.Context, databaseID string, username string, databaseUserACLReq *DatabaseUserACLReq) (*DatabaseUser, *http.Response, error) //nolint:lll
  32  
  33  	ListDBs(ctx context.Context, databaseID string) ([]DatabaseDB, *Meta, *http.Response, error)
  34  	CreateDB(ctx context.Context, databaseID string, databaseDBReq *DatabaseDBCreateReq) (*DatabaseDB, *http.Response, error)
  35  	GetDB(ctx context.Context, databaseID string, dbname string) (*DatabaseDB, *http.Response, error)
  36  	DeleteDB(ctx context.Context, databaseID string, dbname string) error
  37  
  38  	ListTopics(ctx context.Context, databaseID string) ([]DatabaseTopic, *Meta, *http.Response, error)
  39  	CreateTopic(ctx context.Context, databaseID string, databaseTopicReq *DatabaseTopicCreateReq) (*DatabaseTopic, *http.Response, error)
  40  	GetTopic(ctx context.Context, databaseID string, topicName string) (*DatabaseTopic, *http.Response, error)
  41  	UpdateTopic(ctx context.Context, databaseID string, topicName string, databaseTopicReq *DatabaseTopicUpdateReq) (*DatabaseTopic, *http.Response, error) //nolint:lll
  42  	DeleteTopic(ctx context.Context, databaseID string, topicName string) error
  43  
  44  	ListQuotas(ctx context.Context, databaseID string) ([]DatabaseQuota, *Meta, *http.Response, error)
  45  	CreateQuota(ctx context.Context, databaseID string, databaseQuotaReq *DatabaseQuotaCreateReq) (*DatabaseQuota, *http.Response, error)
  46  	GetQuota(ctx context.Context, databaseID string, clientID, username string) (*DatabaseQuota, *http.Response, error)
  47  	UpdateQuota(ctx context.Context, databaseID string, clientID, username string, databaseQuotaReq *DatabaseQuotaUpdateReq) (*DatabaseQuota, *http.Response, error) //nolint:lll
  48  	DeleteQuota(ctx context.Context, databaseID string, clientID, username string) error
  49  
  50  	ListMaintenanceUpdates(ctx context.Context, databaseID string) ([]string, *http.Response, error)
  51  	StartMaintenance(ctx context.Context, databaseID string) (string, *http.Response, error)
  52  
  53  	ListAvailableConnectors(ctx context.Context, databaseID string) ([]DatabaseAvailableConnector, *http.Response, error)
  54  	GetConnectorConfigurationSchema(ctx context.Context, databaseID string, connectorClass string) ([]DatabaseConnectorConfigurationOption, *http.Response, error) //nolint:lll
  55  	ListConnectors(ctx context.Context, databaseID string) ([]DatabaseConnector, *Meta, *http.Response, error)
  56  	CreateConnector(ctx context.Context, databaseID string, databaseConnectorReq *DatabaseConnectorCreateReq) (*DatabaseConnector, *http.Response, error) //nolint:lll
  57  	GetConnector(ctx context.Context, databaseID string, connectorName string) (*DatabaseConnector, *http.Response, error)
  58  	UpdateConnector(ctx context.Context, databaseID string, connectorName string, databaseConnectorReq *DatabaseConnectorUpdateReq) (*DatabaseConnector, *http.Response, error) //nolint:lll
  59  	DeleteConnector(ctx context.Context, databaseID string, connectorName string) error
  60  	GetConnectorStatus(ctx context.Context, databaseID string, connectorName string) (*DatabaseConnectorStatus, *http.Response, error)
  61  	RestartConnector(ctx context.Context, databaseID string, connectorName string) error
  62  	PauseConnector(ctx context.Context, databaseID string, connectorName string) error
  63  	ResumeConnector(ctx context.Context, databaseID string, connectorName string) error
  64  	RestartConnectorTask(ctx context.Context, databaseID string, connectorName string, taskID int) error
  65  
  66  	ListServiceAlerts(ctx context.Context, databaseID string, databaseAlertsReq *DatabaseListAlertsReq) ([]DatabaseAlert, *http.Response, error) //nolint:lll
  67  
  68  	GetMigrationStatus(ctx context.Context, databaseID string) (*DatabaseMigration, *http.Response, error)
  69  	StartMigration(ctx context.Context, databaseID string, databaseMigrationReq *DatabaseMigrationStartReq) (*DatabaseMigration, *http.Response, error) //nolint:lll
  70  	DetachMigration(ctx context.Context, databaseID string) error
  71  
  72  	AddReadOnlyReplica(ctx context.Context, databaseID string, databaseReplicaReq *DatabaseAddReplicaReq) (*Database, *http.Response, error)
  73  	PromoteReadReplica(ctx context.Context, databaseID string) error
  74  
  75  	GetBackupInformation(ctx context.Context, databaseID string) (*DatabaseBackups, *http.Response, error)
  76  	RestoreFromBackup(ctx context.Context, databaseID string, databaseRestoreReq *DatabaseBackupRestoreReq) (*Database, *http.Response, error)
  77  	Fork(ctx context.Context, databaseID string, databaseForkReq *DatabaseForkReq) (*Database, *http.Response, error)
  78  
  79  	ListConnectionPools(ctx context.Context, databaseID string) (*DatabaseConnections, []DatabaseConnectionPool, *Meta, *http.Response, error)
  80  	CreateConnectionPool(ctx context.Context, databaseID string, databaseConnectionPoolReq *DatabaseConnectionPoolCreateReq) (*DatabaseConnectionPool, *http.Response, error) //nolint:lll
  81  	GetConnectionPool(ctx context.Context, databaseID string, poolName string) (*DatabaseConnectionPool, *http.Response, error)
  82  	UpdateConnectionPool(ctx context.Context, databaseID string, poolName string, databaseConnectionPoolReq *DatabaseConnectionPoolUpdateReq) (*DatabaseConnectionPool, *http.Response, error) //nolint:lll
  83  	DeleteConnectionPool(ctx context.Context, databaseID string, poolName string) error
  84  
  85  	ListAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error)
  86  	UpdateAdvancedOptions(ctx context.Context, databaseID string, databaseAdvancedOptionsReq *DatabaseAdvancedOptions) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error)                                                         //nolint:lll
  87  	ListKafkaRESTAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error)                                                                                              //nolint:lll
  88  	UpdateKafkaRESTAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaRESTAdvancedOptionsReq *DatabaseKafkaRESTAdvancedOptions) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error)                     //nolint:lll
  89  	ListSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error)                                                                                    //nolint:lll
  90  	UpdateSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string, databaseSchemaRegistryAdvancedOptionsReq *DatabaseSchemaRegistryAdvancedOptions) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
  91  	ListKafkaConnectAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error)                                                                                        //nolint:lll
  92  	UpdateKafkaConnectAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaConnectAdvancedOptionsReq *DatabaseKafkaConnectAdvancedOptions) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error)         //nolint:lll
  93  
  94  	ListAvailableVersions(ctx context.Context, databaseID string) ([]string, *http.Response, error)
  95  	StartVersionUpgrade(ctx context.Context, databaseID string, databaseVersionUpgradeReq *DatabaseVersionUpgradeReq) (string, *http.Response, error) //nolint:lll
  96  }
  97  
  98  // DatabaseServiceHandler handles interaction with the server methods for the Vultr API
  99  type DatabaseServiceHandler struct {
 100  	client *Client
 101  }
 102  
 103  // DBPlanListOptions handles GET request parameters for the ListPlans endpoint
 104  type DBPlanListOptions struct {
 105  	Engine string `url:"engine,omitempty"`
 106  	Nodes  int    `url:"nodes,omitempty"`
 107  	Region string `url:"region,omitempty"`
 108  }
 109  
 110  // DatabasePlan represents a Managed Database plan
 111  type DatabasePlan struct {
 112  	ID               string           `json:"id"`
 113  	NumberOfNodes    int              `json:"number_of_nodes"`
 114  	Type             string           `json:"type"`
 115  	VCPUCount        int              `json:"vcpu_count"`
 116  	RAM              int              `json:"ram"`
 117  	Disk             int              `json:"disk"`
 118  	MonthlyCost      int              `json:"monthly_cost"`
 119  	SupportedEngines SupportedEngines `json:"supported_engines"`
 120  	MaxConnections   *MaxConnections  `json:"max_connections,omitempty"`
 121  	Locations        []string         `json:"locations"`
 122  }
 123  
 124  // SupportedEngines represents an object containing supported database engine types for Managed Database plans
 125  type SupportedEngines struct {
 126  	MySQL  *bool `json:"mysql"`
 127  	PG     *bool `json:"pg"`
 128  	Valkey *bool `json:"valkey"`
 129  	Kafka  *bool `json:"kafka"`
 130  }
 131  
 132  // MaxConnections represents an object containing the maximum number of connections by engine type for Managed Database plans
 133  type MaxConnections struct {
 134  	MySQL int `json:"mysql,omitempty"`
 135  	PG    int `json:"pg,omitempty"`
 136  }
 137  
 138  // databasePlansBase holds the entire ListPlans API response
 139  type databasePlansBase struct {
 140  	DatabasePlans []DatabasePlan `json:"plans"`
 141  	Meta          *Meta          `json:"meta"`
 142  }
 143  
 144  // DBListOptions handles GET request parameters for the List endpoint
 145  type DBListOptions struct {
 146  	Label  string `url:"label,omitempty"`
 147  	Tag    string `url:"tag,omitempty"`
 148  	Region string `url:"region,omitempty"`
 149  }
 150  
 151  // Database represents a Managed Database subscription
 152  type Database struct {
 153  	ID                     string               `json:"id"`
 154  	DateCreated            string               `json:"date_created"`
 155  	Plan                   string               `json:"plan"`
 156  	PlanDisk               int                  `json:"plan_disk"`
 157  	PlanRAM                int                  `json:"plan_ram"`
 158  	PlanVCPUs              int                  `json:"plan_vcpus"`
 159  	PlanReplicas           *int                 `json:"plan_replicas,omitempty"`
 160  	PlanBrokers            int                  `json:"plan_brokers,omitempty"`
 161  	Region                 string               `json:"region"`
 162  	DatabaseEngine         string               `json:"database_engine"`
 163  	DatabaseEngineVersion  string               `json:"database_engine_version"`
 164  	VPCID                  string               `json:"vpc_id"`
 165  	Status                 string               `json:"status"`
 166  	Label                  string               `json:"label"`
 167  	Tag                    string               `json:"tag"`
 168  	DBName                 string               `json:"dbname,omitempty"`
 169  	FerretDBCredentials    *FerretDBCredentials `json:"ferretdb_credentials,omitempty"`
 170  	Host                   string               `json:"host"`
 171  	PublicHost             string               `json:"public_host,omitempty"`
 172  	Port                   string               `json:"port"`
 173  	SASLPort               string               `json:"sasl_port,omitempty"`
 174  	EnableKafkaREST        *bool                `json:"enable_kafka_rest,omitempty"`
 175  	KafkaRESTURI           string               `json:"kafka_rest_uri,omitempty"`
 176  	EnableSchemaRegistry   *bool                `json:"enable_schema_registry,omitempty"`
 177  	SchemaRegistryURI      string               `json:"schema_registry_uri,omitempty"`
 178  	EnableKafkaConnect     *bool                `json:"enable_kafka_connect,omitempty"`
 179  	User                   string               `json:"user"`
 180  	Password               string               `json:"password"`
 181  	AccessKey              string               `json:"access_key,omitempty"`
 182  	AccessCert             string               `json:"access_cert,omitempty"`
 183  	MaintenanceDOW         string               `json:"maintenance_dow"`
 184  	MaintenanceTime        string               `json:"maintenance_time"`
 185  	BackupHour             *string              `json:"backup_hour,omitempty"`
 186  	BackupMinute           *string              `json:"backup_minute,omitempty"`
 187  	LatestBackup           string               `json:"latest_backup"`
 188  	TrustedIPs             []string             `json:"trusted_ips"`
 189  	CACertificate          string               `json:"ca_certificate"`
 190  	MySQLSQLModes          []string             `json:"mysql_sql_modes,omitempty"`
 191  	MySQLRequirePrimaryKey *bool                `json:"mysql_require_primary_key,omitempty"`
 192  	MySQLSlowQueryLog      *bool                `json:"mysql_slow_query_log,omitempty"`
 193  	MySQLLongQueryTime     int                  `json:"mysql_long_query_time,omitempty"`
 194  	PGAvailableExtensions  []PGExtension        `json:"pg_available_extensions,omitempty"`
 195  	EvictionPolicy         string               `json:"eviction_policy,omitempty"`
 196  	ClusterTimeZone        string               `json:"cluster_time_zone,omitempty"`
 197  	ReadReplicas           []Database           `json:"read_replicas,omitempty"`
 198  }
 199  
 200  // FerretDBCredentials represents connection details and IP address information for FerretDB engine type subscriptions
 201  type FerretDBCredentials struct {
 202  	Host      string `json:"host"`
 203  	Port      int    `json:"port"`
 204  	User      string `json:"user"`
 205  	Password  string `json:"password"`
 206  	PublicIP  string `json:"public_ip"`
 207  	PrivateIP string `json:"private_ip,omitempty"`
 208  }
 209  
 210  // PGExtension represents an object containing extension name and version information
 211  type PGExtension struct {
 212  	Name     string   `json:"name"`
 213  	Versions []string `json:"versions,omitempty"`
 214  }
 215  
 216  // databasesBase holds the entire List API response
 217  type databasesBase struct {
 218  	Databases []Database `json:"databases"`
 219  	Meta      *Meta      `json:"meta"`
 220  }
 221  
 222  // databaseBase holds the entire Get API response
 223  type databaseBase struct {
 224  	Database *Database `json:"database"`
 225  }
 226  
 227  // DatabaseCreateReq struct used to create a database
 228  type DatabaseCreateReq struct {
 229  	DatabaseEngine         string   `json:"database_engine,omitempty"`
 230  	DatabaseEngineVersion  string   `json:"database_engine_version,omitempty"`
 231  	Region                 string   `json:"region,omitempty"`
 232  	Plan                   string   `json:"plan,omitempty"`
 233  	Label                  string   `json:"label,omitempty"`
 234  	Tag                    string   `json:"tag,omitempty"`
 235  	VPCID                  string   `json:"vpc_id,omitempty"`
 236  	MaintenanceDOW         string   `json:"maintenance_dow,omitempty"`
 237  	MaintenanceTime        string   `json:"maintenance_time,omitempty"`
 238  	BackupHour             *string  `json:"backup_hour,omitempty"`
 239  	BackupMinute           *string  `json:"backup_minute,omitempty"`
 240  	TrustedIPs             []string `json:"trusted_ips,omitempty"`
 241  	MySQLSQLModes          []string `json:"mysql_sql_modes,omitempty"`
 242  	MySQLRequirePrimaryKey *bool    `json:"mysql_require_primary_key,omitempty"`
 243  	MySQLSlowQueryLog      *bool    `json:"mysql_slow_query_log,omitempty"`
 244  	MySQLLongQueryTime     int      `json:"mysql_long_query_time,omitempty"`
 245  	EvictionPolicy         string   `json:"eviction_policy,omitempty"`
 246  	EnableKafkaREST        *bool    `json:"enable_kafka_rest,omitempty"`
 247  	EnableSchemaRegistry   *bool    `json:"enable_schema_registry,omitempty"`
 248  	EnableKafkaConnect     *bool    `json:"enable_kafka_connect,omitempty"`
 249  }
 250  
 251  // DatabaseUpdateReq struct used to update a database
 252  type DatabaseUpdateReq struct {
 253  	Region                 string   `json:"region,omitempty"`
 254  	Plan                   string   `json:"plan,omitempty"`
 255  	Label                  string   `json:"label,omitempty"`
 256  	Tag                    string   `json:"tag,omitempty"`
 257  	VPCID                  *string  `json:"vpc_id,omitempty"`
 258  	MaintenanceDOW         string   `json:"maintenance_dow,omitempty"`
 259  	MaintenanceTime        string   `json:"maintenance_time,omitempty"`
 260  	BackupHour             *string  `json:"backup_hour,omitempty"`
 261  	BackupMinute           *string  `json:"backup_minute,omitempty"`
 262  	ClusterTimeZone        string   `json:"cluster_time_zone,omitempty"`
 263  	TrustedIPs             []string `json:"trusted_ips,omitempty"`
 264  	MySQLSQLModes          []string `json:"mysql_sql_modes,omitempty"`
 265  	MySQLRequirePrimaryKey *bool    `json:"mysql_require_primary_key,omitempty"`
 266  	MySQLSlowQueryLog      *bool    `json:"mysql_slow_query_log,omitempty"`
 267  	MySQLLongQueryTime     int      `json:"mysql_long_query_time,omitempty"`
 268  	EvictionPolicy         string   `json:"eviction_policy,omitempty"`
 269  	EnableKafkaREST        *bool    `json:"enable_kafka_rest,omitempty"`
 270  	EnableSchemaRegistry   *bool    `json:"enable_schema_registry,omitempty"`
 271  	EnableKafkaConnect     *bool    `json:"enable_kafka_connect,omitempty"`
 272  }
 273  
 274  // DatabaseUsage represents disk, memory, and CPU usage for a Managed Database
 275  type DatabaseUsage struct {
 276  	Disk   DatabaseDiskUsage   `json:"disk"`
 277  	Memory DatabaseMemoryUsage `json:"memory"`
 278  	CPU    DatabaseCPUUsage    `json:"cpu"`
 279  }
 280  
 281  // DatabaseDiskUsage represents disk usage details for a Managed Database
 282  type DatabaseDiskUsage struct {
 283  	CurrentGB  float32 `json:"current_gb"`
 284  	MaxGB      int     `json:"max_gb"`
 285  	Percentage float32 `json:"percentage"`
 286  }
 287  
 288  // DatabaseMemoryUsage represents memory usage details for a Managed Database
 289  type DatabaseMemoryUsage struct {
 290  	CurrentMB  float32 `json:"current_mb"`
 291  	MaxMB      int     `json:"max_mb"`
 292  	Percentage float32 `json:"percentage"`
 293  }
 294  
 295  // DatabaseCPUUsage represents average CPU usage for a Managed Database
 296  type DatabaseCPUUsage struct {
 297  	Percentage float32 `json:"percentage"`
 298  }
 299  
 300  // databaseUsageBase represents a usage details API response for a Managed Database
 301  type databaseUsageBase struct {
 302  	Usage *DatabaseUsage `json:"usage"`
 303  }
 304  
 305  // DatabaseUser represents a user within a Managed Database cluster
 306  type DatabaseUser struct {
 307  	Username      string           `json:"username"`
 308  	Password      string           `json:"password"`
 309  	Encryption    string           `json:"encryption,omitempty"`
 310  	AccessControl *DatabaseUserACL `json:"access_control,omitempty"`
 311  	Permission    string           `json:"permission,omitempty"`
 312  	AccessKey     string           `json:"access_key,omitempty"`
 313  	AccessCert    string           `json:"access_cert,omitempty"`
 314  }
 315  
 316  // DatabaseUserACL represents an access control configuration for a user within a Valkey Managed Database cluster
 317  type DatabaseUserACL struct {
 318  	ACLCategories []string `json:"acl_categories"`
 319  	ACLChannels   []string `json:"acl_channels"`
 320  	ACLCommands   []string `json:"acl_commands"`
 321  	ACLKeys       []string `json:"acl_keys"`
 322  }
 323  
 324  // DatabaseUserACLReq represents input for updating a user's access control within a Managed Database cluster
 325  type DatabaseUserACLReq struct {
 326  	ACLCategories *[]string `json:"acl_categories,omitempty"`
 327  	ACLChannels   *[]string `json:"acl_channels,omitempty"`
 328  	ACLCommands   *[]string `json:"acl_commands,omitempty"`
 329  	ACLKeys       *[]string `json:"acl_keys,omitempty"`
 330  	Permission    string    `json:"permission,omitempty"`
 331  }
 332  
 333  // databaseUserBase holds the API response for retrieving a single database user within a Managed Database
 334  type databaseUserBase struct {
 335  	DatabaseUser *DatabaseUser `json:"user"`
 336  }
 337  
 338  // databaseUsersBase holds the API response for retrieving a list of database users within a Managed Database
 339  type databaseUsersBase struct {
 340  	DatabaseUsers []DatabaseUser `json:"users"`
 341  	Meta          *Meta          `json:"meta"`
 342  }
 343  
 344  // DatabaseUserCreateReq struct used to create a user within a Managed Database
 345  type DatabaseUserCreateReq struct {
 346  	Username   string `json:"username"`
 347  	Password   string `json:"password,omitempty"`
 348  	Encryption string `json:"encryption,omitempty"`
 349  	Permission string `json:"permission,omitempty"`
 350  }
 351  
 352  // DatabaseUserUpdateReq struct used to update a user within a Managed Database
 353  type DatabaseUserUpdateReq struct {
 354  	Password string `json:"password"`
 355  }
 356  
 357  // DatabaseDB represents a logical database within a Managed Database cluster
 358  type DatabaseDB struct {
 359  	Name string `json:"name"`
 360  }
 361  
 362  // databaseDBBase holds the API response for retrieving a single logical database within a Managed Database
 363  type databaseDBBase struct {
 364  	DatabaseDB *DatabaseDB `json:"db"`
 365  }
 366  
 367  // databaseDBsBase holds the API response for retrieving a list of logical databases within a Managed Database
 368  type databaseDBsBase struct {
 369  	DatabaseDBs []DatabaseDB `json:"dbs"`
 370  	Meta        *Meta        `json:"meta"`
 371  }
 372  
 373  // DatabaseDBCreateReq struct used to create a logical database within a Managed Database
 374  type DatabaseDBCreateReq struct {
 375  	Name string `json:"name"`
 376  }
 377  
 378  // DatabaseTopic represents a Kafka topic within a Managed Database cluster
 379  type DatabaseTopic struct {
 380  	Name           string `json:"name"`
 381  	Partitions     int    `json:"partitions"`
 382  	Replication    int    `json:"replication"`
 383  	RetentionHours int    `json:"retention_hours"`
 384  	RetentionBytes int    `json:"retention_bytes"`
 385  }
 386  
 387  // databaseTopicBase holds the API response for retrieving a single Kafka topic within a Managed Database
 388  type databaseTopicBase struct {
 389  	DatabaseTopic *DatabaseTopic `json:"topic"`
 390  }
 391  
 392  // databaseTopicsBase holds the API response for retrieving a list of Kafka topics within a Managed Database
 393  type databaseTopicsBase struct {
 394  	DatabaseTopics []DatabaseTopic `json:"topics"`
 395  	Meta           *Meta           `json:"meta"`
 396  }
 397  
 398  // DatabaseTopicCreateReq struct used to create a Kafka topic within a Managed Database
 399  type DatabaseTopicCreateReq struct {
 400  	Name           string `json:"name"`
 401  	Partitions     int    `json:"partitions"`
 402  	Replication    int    `json:"replication"`
 403  	RetentionHours int    `json:"retention_hours"`
 404  	RetentionBytes int    `json:"retention_bytes"`
 405  }
 406  
 407  // DatabaseTopicUpdateReq struct used to update a Kafka topic within a Managed Database
 408  type DatabaseTopicUpdateReq struct {
 409  	Partitions     int `json:"partitions"`
 410  	Replication    int `json:"replication"`
 411  	RetentionHours int `json:"retention_hours"`
 412  	RetentionBytes int `json:"retention_bytes"`
 413  }
 414  
 415  // DatabaseQuota represents a Kafka quota within a Managed Database cluster
 416  type DatabaseQuota struct {
 417  	ClientID          string `json:"client_id"`
 418  	User              string `json:"user"`
 419  	ConsumerByteRate  int    `json:"consumer_byte_rate"`
 420  	ProducerByteRate  int    `json:"producer_byte_rate"`
 421  	RequestPercentage int    `json:"request_percentage"`
 422  }
 423  
 424  // databaseQuotaBase holds the API response for retrieving a single Kafka quota within a Managed Database
 425  type databaseQuotaBase struct {
 426  	DatabaseQuota *DatabaseQuota `json:"quota"`
 427  }
 428  
 429  // databaseQuotasBase holds the API response for retrieving a list of Kafka quotas within a Managed Database
 430  type databaseQuotasBase struct {
 431  	DatabaseQuotas []DatabaseQuota `json:"quotas"`
 432  	Meta           *Meta           `json:"meta"`
 433  }
 434  
 435  // DatabaseQuotaCreateReq struct used to create a Kafka quota within a Managed Database
 436  type DatabaseQuotaCreateReq struct {
 437  	ClientID          string `json:"client_id"`
 438  	User              string `json:"user"`
 439  	ConsumerByteRate  int    `json:"consumer_byte_rate"`
 440  	ProducerByteRate  int    `json:"producer_byte_rate"`
 441  	RequestPercentage int    `json:"request_percentage"`
 442  }
 443  
 444  // DatabaseQuotaUpdateReq struct used to update a Kafka quota within a Managed Database
 445  type DatabaseQuotaUpdateReq struct {
 446  	ConsumerByteRate  int `json:"consumer_byte_rate"`
 447  	ProducerByteRate  int `json:"producer_byte_rate"`
 448  	RequestPercentage int `json:"request_percentage"`
 449  }
 450  
 451  // DatabaseAvailableConnector represents an available Kafka connector within a Managed Database cluster
 452  type DatabaseAvailableConnector struct {
 453  	Class   string `json:"class"`
 454  	Title   string `json:"title"`
 455  	Version string `json:"version"`
 456  	Type    string `json:"type"`
 457  	DocURL  string `json:"doc_url"`
 458  }
 459  
 460  // databaseAvailableConnectorsBase holds the API response for retrieving a list of available Kafka connectors within a Managed Database
 461  type databaseAvailableConnectorsBase struct {
 462  	DatabaseAvailableConnectors []DatabaseAvailableConnector `json:"available_connectors"`
 463  }
 464  
 465  // DatabaseConnectorConfigurationOption represents a configuration option for a Kafka connector within a Managed Database cluster
 466  type DatabaseConnectorConfigurationOption struct {
 467  	Name         string `json:"name"`
 468  	Type         string `json:"type"`
 469  	Required     bool   `json:"required"`
 470  	DefaultValue string `json:"default_value"`
 471  	Description  string `json:"description"`
 472  }
 473  
 474  // databaseConnectorConfigBase holds the API response for retrieving a configuration schema for a Kafka connector within a Managed Database
 475  type databaseConnectorConfigBase struct {
 476  	ConfigurationSchema []DatabaseConnectorConfigurationOption `json:"configuration_schema"`
 477  }
 478  
 479  // DatabaseConnector represents a Kafka connector within a Managed Database cluster
 480  type DatabaseConnector struct {
 481  	Name   string                 `json:"name"`
 482  	Class  string                 `json:"class"`
 483  	Topics string                 `json:"topics"`
 484  	Config map[string]interface{} `json:"config"`
 485  }
 486  
 487  // databaseConnectorBase holds the API response for retrieving a single Kafka connector within a Managed Database
 488  type databaseConnectorBase struct {
 489  	DatabaseConnector *DatabaseConnector `json:"connector"`
 490  }
 491  
 492  // databaseConnectorsBase holds the API response for retrieving a list of Kafka connectors within a Managed Database
 493  type databaseConnectorsBase struct {
 494  	DatabaseConnectors []DatabaseConnector `json:"connectors"`
 495  	Meta               *Meta               `json:"meta"`
 496  }
 497  
 498  // DatabaseConnectorCreateReq struct used to create a Kafka connector within a Managed Database
 499  type DatabaseConnectorCreateReq struct {
 500  	Name   string                 `json:"name"`
 501  	Class  string                 `json:"class"`
 502  	Topics string                 `json:"topics"`
 503  	Config map[string]interface{} `json:"config,omitempty"`
 504  }
 505  
 506  // DatabaseConnectorUpdateReq struct used to update a Kafka connector within a Managed Database
 507  type DatabaseConnectorUpdateReq struct {
 508  	Topics string                 `json:"topics,omitempty"`
 509  	Config map[string]interface{} `json:"config,omitempty"`
 510  }
 511  
 512  // DatabaseConnector represents a Kafka connector status within a Managed Database cluster
 513  type DatabaseConnectorStatus struct {
 514  	State string                  `json:"state"`
 515  	Tasks []DatabaseConnectorTask `json:"tasks"`
 516  }
 517  
 518  // DatabaseConnectorTask represents a Kafka connector task within a Managed Database cluster
 519  type DatabaseConnectorTask struct {
 520  	ID    int    `json:"id"`
 521  	State string `json:"state"`
 522  	Trace string `json:"trace"`
 523  }
 524  
 525  // databaseConnectorStatusBase holds the API response for retrieving a Kafka connector status within a Managed Database
 526  type databaseConnectorStatusBase struct {
 527  	ConnectorStatus *DatabaseConnectorStatus `json:"connector_status"`
 528  }
 529  
 530  // databaseUpdatesBase holds the API response for retrieving a list of available maintenance updates within a Managed Database
 531  type databaseUpdatesBase struct {
 532  	AvailableUpdates []string `json:"available_updates"`
 533  }
 534  
 535  // databaseMessage is a bsic object holding a return message for certain API endpoints
 536  type databaseMessage struct {
 537  	Message string `json:"message"`
 538  }
 539  
 540  // DatabaseAlert represents a service alert for a Managed Database cluster
 541  type DatabaseAlert struct {
 542  	Timestamp            string `json:"timestamp"`
 543  	MessageType          string `json:"message_type"`
 544  	Description          string `json:"description"`
 545  	Recommendation       string `json:"recommendation,omitempty"`
 546  	MaintenanceScheduled string `json:"maintenance_scheduled,omitempty"`
 547  	ResourceType         string `json:"resource_type,omitempty"`
 548  	TableCount           int    `json:"table_count,omitempty"`
 549  }
 550  
 551  // databaseAlertsBase holds the API response for querying service alerts within a Managed Database
 552  type databaseAlertsBase struct {
 553  	DatabaseAlerts []DatabaseAlert `json:"alerts"`
 554  }
 555  
 556  // DatabaseListAlertsReq struct used to query service alerts for a Managed Database
 557  type DatabaseListAlertsReq struct {
 558  	Period string `json:"period"`
 559  }
 560  
 561  // DatabaseMigration represents migration details for a Managed Database cluster
 562  type DatabaseMigration struct {
 563  	Status      string              `json:"status"`
 564  	Method      string              `json:"method,omitempty"`
 565  	Error       string              `json:"error,omitempty"`
 566  	Credentials DatabaseCredentials `json:"credentials"`
 567  }
 568  
 569  // DatabaseCredentials represents migration credentials for migration within a Managed Database cluster
 570  type DatabaseCredentials struct {
 571  	Host             string `json:"host"`
 572  	Port             int    `json:"port"`
 573  	Username         string `json:"username"`
 574  	Password         string `json:"password"`
 575  	Database         string `json:"database,omitempty"`
 576  	IgnoredDatabases string `json:"ignored_databases,omitempty"`
 577  	SSL              *bool  `json:"ssl"`
 578  }
 579  
 580  // databaseMigrationBase represents a migration status object API response for a Managed Database
 581  type databaseMigrationBase struct {
 582  	Migration *DatabaseMigration `json:"migration"`
 583  }
 584  
 585  // DatabaseMigrationStartReq struct used to start a migration for a Managed Database
 586  type DatabaseMigrationStartReq struct {
 587  	Host             string `json:"host"`
 588  	Port             int    `json:"port"`
 589  	Username         string `json:"username"`
 590  	Password         string `json:"password"`
 591  	Database         string `json:"database,omitempty"`
 592  	IgnoredDatabases string `json:"ignored_databases,omitempty"`
 593  	SSL              *bool  `json:"ssl"`
 594  }
 595  
 596  // DatabaseAddReplicaReq struct used to add a read-only replica to a Managed Database
 597  type DatabaseAddReplicaReq struct {
 598  	Region string `json:"region,omitempty"`
 599  	Label  string `json:"label,omitempty"`
 600  }
 601  
 602  // DatabaseBackups represents backup information for a Managed Database cluster
 603  type DatabaseBackups struct {
 604  	LatestBackup DatabaseBackup `json:"latest_backup,omitempty"`
 605  	OldestBackup DatabaseBackup `json:"oldest_backup,omitempty"`
 606  }
 607  
 608  // DatabaseBackup represents individual backup details for a Managed Database cluster
 609  type DatabaseBackup struct {
 610  	Date string `json:"date"`
 611  	Time string `json:"time"`
 612  }
 613  
 614  // DatabaseBackupRestoreReq struct used to restore the backup of a Managed Database to a new subscription
 615  type DatabaseBackupRestoreReq struct {
 616  	Label string `json:"label,omitempty"`
 617  	Type  string `json:"type,omitempty"`
 618  	Date  string `json:"date,omitempty"`
 619  	Time  string `json:"time,omitempty"`
 620  }
 621  
 622  // DatabaseForkReq struct used to fork a Managed Database to a new subscription from a backup
 623  type DatabaseForkReq struct {
 624  	Label  string `json:"label,omitempty"`
 625  	Region string `json:"region,omitempty"`
 626  	Plan   string `json:"plan,omitempty"`
 627  	Type   string `json:"type,omitempty"`
 628  	Date   string `json:"date,omitempty"`
 629  	Time   string `json:"time,omitempty"`
 630  }
 631  
 632  // DatabaseConnectionPool represents a PostgreSQL connection pool within a Managed Database cluster
 633  type DatabaseConnectionPool struct {
 634  	Name     string `json:"name"`
 635  	Database string `json:"database"`
 636  	Username string `json:"username"`
 637  	Mode     string `json:"mode"`
 638  	Size     int    `json:"size"`
 639  }
 640  
 641  // DatabaseConnections represents a an object containing used and available connections for a PostgreSQL Managed Database cluster
 642  type DatabaseConnections struct {
 643  	Used      int `json:"used"`
 644  	Available int `json:"available"`
 645  	Max       int `json:"max"`
 646  }
 647  
 648  // databaseConnectionPoolBase represents the API response for retrieving a single connection pool for a PostgreSQL Managed Database
 649  type databaseConnectionPoolBase struct {
 650  	ConnectionPool *DatabaseConnectionPool `json:"connection_pool"`
 651  }
 652  
 653  // databaseConnectionPoolBase represents the API response for retrieving all connection pool information for a PostgreSQL Managed Database
 654  type databaseConnectionPoolsBase struct {
 655  	Connections     *DatabaseConnections     `json:"connections"`
 656  	ConnectionPools []DatabaseConnectionPool `json:"connection_pools"`
 657  	Meta            *Meta                    `json:"meta"`
 658  }
 659  
 660  // DatabaseConnectionPoolCreateReq struct used to create a connection pool within a PostgreSQL Managed Database
 661  type DatabaseConnectionPoolCreateReq struct {
 662  	Name     string `json:"name,omitempty"`
 663  	Database string `json:"database,omitempty"`
 664  	Username string `json:"username,omitempty"`
 665  	Mode     string `json:"mode,omitempty"`
 666  	Size     int    `json:"size,omitempty"`
 667  }
 668  
 669  // DatabaseConnectionPoolUpdateReq struct used to update a connection pool within a PostgreSQL Managed Database
 670  type DatabaseConnectionPoolUpdateReq struct {
 671  	Database string `json:"database,omitempty"`
 672  	Username string `json:"username,omitempty"`
 673  	Mode     string `json:"mode,omitempty"`
 674  	Size     int    `json:"size,omitempty"`
 675  }
 676  
 677  // DatabaseAdvancedOptions represents user configurable advanced options within a Managed Database cluster
 678  type DatabaseAdvancedOptions struct {
 679  	AutovacuumAnalyzeScaleFactor                         float32 `json:"autovacuum_analyze_scale_factor,omitempty"`
 680  	AutovacuumAnalyzeThreshold                           int     `json:"autovacuum_analyze_threshold,omitempty"`
 681  	AutovacuumFreezeMaxAge                               int     `json:"autovacuum_freeze_max_age,omitempty"`
 682  	AutovacuumMaxWorkers                                 int     `json:"autovacuum_max_workers,omitempty"`
 683  	AutovacuumNaptime                                    int     `json:"autovacuum_naptime,omitempty"`
 684  	AutovacuumVacuumCostDelay                            int     `json:"autovacuum_vacuum_cost_delay,omitempty"`
 685  	AutovacuumVacuumCostLimit                            int     `json:"autovacuum_vacuum_cost_limit,omitempty"`
 686  	AutovacuumVacuumScaleFactor                          float32 `json:"autovacuum_vacuum_scale_factor,omitempty"`
 687  	AutovacuumVacuumThreshold                            int     `json:"autovacuum_vacuum_threshold,omitempty"`
 688  	BGWRITERDelay                                        int     `json:"bgwriter_delay,omitempty"`
 689  	BGWRITERFlushAFter                                   int     `json:"bgwriter_flush_after,omitempty"`
 690  	BGWRITERLRUMaxPages                                  int     `json:"bgwriter_lru_maxpages,omitempty"`
 691  	BGWRITERLRUMultiplier                                float32 `json:"bgwriter_lru_multiplier,omitempty"`
 692  	DeadlockTimeout                                      int     `json:"deadlock_timeout,omitempty"`
 693  	DefaultToastCompression                              string  `json:"default_toast_compression,omitempty"`
 694  	IdleInTransactionSessionTimeout                      int     `json:"idle_in_transaction_session_timeout,omitempty"`
 695  	Jit                                                  *bool   `json:"jit,omitempty"`
 696  	LogAutovacuumMinDuration                             int     `json:"log_autovacuum_min_duration,omitempty"`
 697  	LogErrorVerbosity                                    string  `json:"log_error_verbosity,omitempty"`
 698  	LogLinePrefix                                        string  `json:"log_line_prefix,omitempty"`
 699  	LogMinDurationStatement                              int     `json:"log_min_duration_statement,omitempty"`
 700  	MaxFilesPerProcess                                   int     `json:"max_files_per_process,omitempty"`
 701  	MaxLocksPerTransaction                               int     `json:"max_locks_per_transaction,omitempty"`
 702  	MaxLogicalReplicationWorkers                         int     `json:"max_logical_replication_workers,omitempty"`
 703  	MaxParallelWorkers                                   int     `json:"max_parallel_workers,omitempty"`
 704  	MaxParallelWorkersPerGather                          int     `json:"max_parallel_workers_per_gather,omitempty"`
 705  	MaxPredLocksPerTransaction                           int     `json:"max_pred_locks_per_transaction,omitempty"`
 706  	MaxPreparedTransactions                              int     `json:"max_prepared_transactions,omitempty"`
 707  	MaxReplicationSlots                                  int     `json:"max_replication_slots,omitempty"`
 708  	MaxStackDepth                                        int     `json:"max_stack_depth,omitempty"`
 709  	MaxStandbyArchiveDelay                               int     `json:"max_standby_archive_delay,omitempty"`
 710  	MaxStandbyStreamingDelay                             int     `json:"max_standby_streaming_delay,omitempty"`
 711  	MaxWalSenders                                        int     `json:"max_wal_senders,omitempty"`
 712  	MaxWorkerProcesses                                   int     `json:"max_worker_processes,omitempty"`
 713  	PGPartmanBGWInterval                                 int     `json:"pg_partman_bgw.interval,omitempty"`
 714  	PGPartmanBGWRole                                     string  `json:"pg_partman_bgw.role,omitempty"`
 715  	PGStateStatementsTrack                               string  `json:"pg_stat_statements.track,omitempty"`
 716  	TempFileLimit                                        int     `json:"temp_file_limit,omitempty"`
 717  	TrackActivityQuerySize                               int     `json:"track_activity_query_size,omitempty"`
 718  	TrackCommitTimestamp                                 string  `json:"track_commit_timestamp,omitempty"`
 719  	TrackFunctions                                       string  `json:"track_functions,omitempty"`
 720  	TrackIOTiming                                        string  `json:"track_io_timing,omitempty"`
 721  	WALSenderTImeout                                     int     `json:"wal_sender_timeout,omitempty"`
 722  	WALWriterDelay                                       int     `json:"wal_writer_delay,omitempty"`
 723  	ConnectTimeout                                       int     `json:"connect_timeout,omitempty"`
 724  	GroupConcatMaxLen                                    int     `json:"group_concat_max_len,omitempty"`
 725  	InnoDBChangeBufferMaxSize                            int     `json:"innodb_change_buffer_max_size,omitempty"`
 726  	InnoDBFlushNeighbors                                 int     `json:"innodb_flush_neighbors,omitempty"`
 727  	InnoDBFTMinTokenSize                                 int     `json:"innodb_ft_min_token_size,omitempty"`
 728  	InnoDBFTServerStopwordTable                          string  `json:"innodb_ft_server_stopword_table,omitempty"`
 729  	InnoDBLockWaitTimeout                                int     `json:"innodb_lock_wait_timeout,omitempty"`
 730  	InnoDBLogBufferSize                                  int     `json:"innodb_log_buffer_size,omitempty"`
 731  	InnoDBOnlineAlterLogMaxSize                          int     `json:"innodb_online_alter_log_max_size,omitempty"`
 732  	InnoDBPrintAllDeadlocks                              *bool   `json:"innodb_print_all_deadlocks,omitempty"`
 733  	InnoDBReadIOThreads                                  int     `json:"innodb_read_io_threads,omitempty"`
 734  	InnoDBRollbackOnTimeout                              *bool   `json:"innodb_rollback_on_timeout,omitempty"`
 735  	InnoDBThreadConcurrency                              int     `json:"innodb_thread_concurrency,omitempty"`
 736  	InnoDBWriteIOThreads                                 int     `json:"innodb_write_io_threads,omitempty"`
 737  	InteractiveTimeout                                   int     `json:"interactive_timeout,omitempty"`
 738  	InternalTmpMemStorageEngine                          string  `json:"internal_tmp_mem_storage_engine,omitempty"`
 739  	MaxAllowedPacket                                     int     `json:"max_allowed_packet,omitempty"`
 740  	MaxHeapTableSize                                     int     `json:"max_heap_table_size,omitempty"`
 741  	NetBufferLength                                      int     `json:"net_buffer_length,omitempty"`
 742  	NetReadTimeout                                       int     `json:"net_read_timeout,omitempty"`
 743  	NetWriteTimeout                                      int     `json:"net_write_timeout,omitempty"`
 744  	SortBufferSize                                       int     `json:"sort_buffer_size,omitempty"`
 745  	TmpTableSize                                         int     `json:"tmp_table_size,omitempty"`
 746  	WaitTimeout                                          int     `json:"wait_timeout,omitempty"`
 747  	CompressionType                                      string  `json:"compression_type,omitempty"`
 748  	GroupInitialRebalanceDelayMS                         int     `json:"group_initial_rebalance_delay_ms,omitempty"`
 749  	GroupMinSessinTimeoutMS                              int     `json:"group_min_session_timeout_ms,omitempty"`
 750  	GroupMaxSessionTimeoutMS                             int     `json:"group_max_session_timeout_ms,omitempty"`
 751  	ConnectionsMaxIdleMS                                 int     `json:"connections_max_idle_ms,omitempty"`
 752  	MaxIncrementalFetchSessionCacheSlots                 int     `json:"max_incremental_fetch_session_cache_slots,omitempty"`
 753  	MessageMaxBytes                                      int     `json:"message_max_bytes,omitempty"`
 754  	OffsetsRetentionMinutes                              int     `json:"offsets_retention_minutes,omitempty"`
 755  	LogCleanerDeleteRetentionMS                          int     `json:"log_cleaner_delete_retention_ms,omitempty"`
 756  	LogCleanerMinCleanableRatio                          float32 `json:"log_cleaner_min_cleanable_ratio,omitempty"`
 757  	LogCleanerMaxCompactionLagMS                         int     `json:"log_cleaner_max_compaction_lag_ms,omitempty"`
 758  	LogCleanerMinCompactionLagMS                         int     `json:"log_cleaner_min_compaction_lag_ms,omitempty"`
 759  	LogCleanupPolicy                                     string  `json:"log_cleanup_policy,omitempty"`
 760  	LogFlushIntervalMessages                             int     `json:"log_flush_interval_messages,omitempty"`
 761  	LogFlushIntervalMS                                   int     `json:"log_flush_interval_ms,omitempty"`
 762  	LogIndexIntervalBytes                                int     `json:"log_index_interval_bytes,omitempty"`
 763  	LogIndexSizeMaxBytes                                 int     `json:"log_index_size_max_bytes,omitempty"`
 764  	LogLocalRetentionMS                                  int     `json:"log_local_retention_ms,omitempty"`
 765  	LogLocalRetentionBytes                               int     `json:"log_local_retention_bytes,omitempty"`
 766  	LogMessageDownconversionEnable                       *bool   `json:"log_message_downconversion_enable,omitempty"`
 767  	LogMessageTimestampType                              string  `json:"log_message_timestamp_type,omitempty"`
 768  	LogMessageTimestampDifferenceMaxMS                   int     `json:"log_message_timestamp_difference_max_ms,omitempty"`
 769  	LogPreallocate                                       *bool   `json:"log_preallocate,omitempty"`
 770  	LogRetentionBytes                                    int     `json:"log_retention_bytes,omitempty"`
 771  	LogRetentionHours                                    int     `json:"log_retention_hours,omitempty"`
 772  	LogRetentionMS                                       int     `json:"log_retention_ms,omitempty"`
 773  	LogRollJitterMS                                      int     `json:"log_roll_jitter_ms,omitempty"`
 774  	LogRollMS                                            int     `json:"log_roll_ms,omitempty"`
 775  	LogSegmentBytes                                      int     `json:"log_segment_bytes,omitempty"`
 776  	LogSegmentDeleteDelayMS                              int     `json:"log_segment_delete_delay_ms,omitempty"`
 777  	AutoCreateTopicsEnable                               *bool   `json:"auto_create_topics_enable,omitempty"`
 778  	MinInsyncReplicas                                    int     `json:"min_insync_replicas,omitempty"`
 779  	NumPartitions                                        int     `json:"num_partitions,omitempty"`
 780  	DefaultReplicationFactor                             int     `json:"default_replication_factor,omitempty"`
 781  	ReplicaFetchMaxBytes                                 int     `json:"replica_fetch_max_bytes,omitempty"`
 782  	ReplicaFetchResponseMaxBytes                         int     `json:"replica_fetch_response_max_bytes,omitempty"`
 783  	MaxConnectionsPerIP                                  int     `json:"max_connections_per_ip,omitempty"`
 784  	ProducerPurgatoryPurgeIntervalRequests               int     `json:"producer_purgatory_purge_interval_requests,omitempty"`
 785  	SASLOauthbearerExpectedAudience                      string  `json:"sasl_oauthbearer_expected_audience,omitempty"`
 786  	SASLOauthbearerExpectedIssuer                        string  `json:"sasl_oauthbearer_expected_issuer,omitempty"`
 787  	SASLOauthbearerJWKSEndpointURL                       string  `json:"sasl_oauthbearer_jwks_endpoint_url,omitempty"`
 788  	SASLOauthbearerSubClaimName                          string  `json:"sasl_oauthbearer_sub_claim_name,omitempty"`
 789  	SocketRequestMaxBytes                                int     `json:"socket_request_max_bytes,omitempty"`
 790  	TransactionStateLogSegmentBytes                      int     `json:"transaction_state_log_segment_bytes,omitempty"`
 791  	TransactionRemoveExpiredTransactionCleanupIntervalMS int     `json:"transaction_remove_expired_transaction_cleanup_interval_ms,omitempty"`
 792  	TransactionPartitionVerificationEnable               *bool   `json:"transaction_partition_verification_enable,omitempty"`
 793  }
 794  
 795  // AvailableOption represents an available advanced configuration option for a Managed Database cluster
 796  type AvailableOption struct {
 797  	Name      string   `json:"name"`
 798  	Type      string   `json:"type"`
 799  	Enumerals []string `json:"enumerals,omitempty"`
 800  	MinValue  *float32 `json:"min_value,omitempty"`
 801  	MaxValue  *float32 `json:"max_value,omitempty"`
 802  	AltValues []int    `json:"alt_values,omitempty"`
 803  	Units     string   `json:"units,omitempty"`
 804  }
 805  
 806  // databaseAdvancedOptionsBase represents the API response for advanced configuration options for a Managed Database
 807  type databaseAdvancedOptionsBase struct {
 808  	ConfiguredOptions *DatabaseAdvancedOptions `json:"configured_options"`
 809  	AvailableOptions  []AvailableOption        `json:"available_options"`
 810  }
 811  
 812  // DatabaseKafkaRESTAdvancedOptions represents user configurable Kafka REST advanced options within a Managed Database cluster
 813  type DatabaseKafkaRESTAdvancedOptions struct {
 814  	ProducerAcks              string `json:"producer_acks,omitempty"`
 815  	ProducerCompressionType   string `json:"producer_compression_type,omitempty"`
 816  	ProducerLingerMS          int    `json:"producer_linger_ms,omitempty"`
 817  	ProducerMaxRequestSize    int    `json:"producer_max_request_size,omitempty"`
 818  	ConsumerEnableAutoCommit  *bool  `json:"consumer_enable_auto_commit,omitempty"`
 819  	ConsumerRequestMaxBytes   int    `json:"consumer_request_max_bytes,omitempty"`
 820  	ConsumerRequestTimeoutMS  int    `json:"consumer_request_timeout_ms,omitempty"`
 821  	NameStrategy              string `json:"name_strategy,omitempty"`
 822  	NameStrategyValidation    *bool  `json:"name_strategy_validation,omitempty"`
 823  	SimpleConsumerPoolSizeMax int    `json:"simpleconsumer_pool_size_max,omitempty"`
 824  }
 825  
 826  // databaseKafkaRESTAdvancedOptionsBase represents the API response for Kafka REST advanced configuration options for a Managed Database
 827  type databaseKafkaRESTAdvancedOptionsBase struct {
 828  	ConfiguredOptions *DatabaseKafkaRESTAdvancedOptions `json:"configured_options"`
 829  	AvailableOptions  []AvailableOption                 `json:"available_options"`
 830  }
 831  
 832  // DatabaseSchemaRegistryAdvancedOptions represents user configurable Schema Registry advanced options within a Managed Database cluster
 833  type DatabaseSchemaRegistryAdvancedOptions struct {
 834  	LeaderEligibility       *bool `json:"leader_eligibility,omitempty"`
 835  	SchemaReaderStrictMode  *bool `json:"schema_reader_strict_mode,omitempty"`
 836  	RetriableErrorsSilenced *bool `json:"retriable_errors_silenced,omitempty"`
 837  }
 838  
 839  // databaseSchemaRegistryAdvancedOptionsBase represents the API response for Schema Registry advanced options for a Managed Database
 840  type databaseSchemaRegistryAdvancedOptionsBase struct {
 841  	ConfiguredOptions *DatabaseSchemaRegistryAdvancedOptions `json:"configured_options"`
 842  	AvailableOptions  []AvailableOption                      `json:"available_options"`
 843  }
 844  
 845  // DatabaseKafkaConnectAdvancedOptions represents user configurable Kafka Connect advanced options within a Managed Database cluster
 846  type DatabaseKafkaConnectAdvancedOptions struct {
 847  	ConnectorClientConfigOverridePolicy string `json:"connector_client_config_override_policy,omitempty"`
 848  	ConsumerAutoOffsetReset             string `json:"consumer_auto_offset_reset,omitempty"`
 849  	ConsumerFetchMaxBytes               int    `json:"consumer_fetch_max_bytes,omitempty"`
 850  	ConsumerIsolationLevel              string `json:"consumer_isolation_level,omitempty"`
 851  	ConsumerMaxPartitionFetchBytes      int    `json:"consumer_max_partition_fetch_bytes,omitempty"`
 852  	ConsumerMaxPollIntervalMS           int    `json:"consumer_max_poll_interval_ms,omitempty"`
 853  	ConsumerMaxPollRecords              int    `json:"consumer_max_poll_records,omitempty"`
 854  	OffsetFlushIntervalMS               int    `json:"offset_flush_interval_ms,omitempty"`
 855  	OffsetFlushTimeoutMS                int    `json:"offset_flush_timeout_ms,omitempty"`
 856  	ProducerBatchSize                   int    `json:"producer_batch_size,omitempty"`
 857  	ProducerBufferMemory                int    `json:"producer_buffer_memory,omitempty"`
 858  	ProducerCompressionType             string `json:"producer_compression_type,omitempty"`
 859  	ProducerLingerMS                    int    `json:"producer_linger_ms,omitempty"`
 860  	ProducerMaxRequestSize              int    `json:"producer_max_request_size,omitempty"`
 861  	ScheduledRebalanceMaxDelayMS        int    `json:"scheduled_rebalance_max_delay_ms,omitempty"`
 862  	SessionTimeoutMS                    int    `json:"session_timeout_ms,omitempty"`
 863  }
 864  
 865  // databaseKafkaConnectAdvancedOptionsBase represents the API response for Kafka Connect advanced options for a Managed Database
 866  type databaseKafkaConnectAdvancedOptionsBase struct {
 867  	ConfiguredOptions *DatabaseKafkaConnectAdvancedOptions `json:"configured_options"`
 868  	AvailableOptions  []AvailableOption                    `json:"available_options"`
 869  }
 870  
 871  // DatabaseAvailableVersions represents available versions upgrades for a Managed Database cluster
 872  type DatabaseAvailableVersions struct {
 873  	AvailableVersions []string `json:"available_versions"`
 874  }
 875  
 876  // DatabaseVersionUpgradeReq struct used to initiate a version upgrade for a PostgreSQL Managed Database
 877  type DatabaseVersionUpgradeReq struct {
 878  	Version string `json:"version,omitempty"`
 879  }
 880  
 881  // ListPlans retrieves all database plans
 882  func (d *DatabaseServiceHandler) ListPlans(ctx context.Context, options *DBPlanListOptions) ([]DatabasePlan, *Meta, *http.Response, error) {
 883  	uri := fmt.Sprintf("%s/plans", databasePath)
 884  
 885  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
 886  	if err != nil {
 887  		return nil, nil, nil, err
 888  	}
 889  
 890  	newValues, err := query.Values(options)
 891  	if err != nil {
 892  		return nil, nil, nil, err
 893  	}
 894  
 895  	req.URL.RawQuery = newValues.Encode()
 896  
 897  	databasePlans := new(databasePlansBase)
 898  	resp, err := d.client.DoWithContext(ctx, req, databasePlans)
 899  	if err != nil {
 900  		return nil, nil, nil, err
 901  	}
 902  
 903  	return databasePlans.DatabasePlans, databasePlans.Meta, resp, nil
 904  }
 905  
 906  // List retrieves all databases on your account
 907  func (d *DatabaseServiceHandler) List(ctx context.Context, options *DBListOptions) ([]Database, *Meta, *http.Response, error) { //nolint:dupl,lll
 908  	req, err := d.client.NewRequest(ctx, http.MethodGet, databasePath, nil)
 909  	if err != nil {
 910  		return nil, nil, nil, err
 911  	}
 912  
 913  	newValues, err := query.Values(options)
 914  	if err != nil {
 915  		return nil, nil, nil, err
 916  	}
 917  
 918  	req.URL.RawQuery = newValues.Encode()
 919  
 920  	databases := new(databasesBase)
 921  	resp, err := d.client.DoWithContext(ctx, req, databases)
 922  	if err != nil {
 923  		return nil, nil, nil, err
 924  	}
 925  
 926  	return databases.Databases, databases.Meta, resp, nil
 927  }
 928  
 929  // Create will create a Managed Database with the given parameters
 930  func (d *DatabaseServiceHandler) Create(ctx context.Context, databaseReq *DatabaseCreateReq) (*Database, *http.Response, error) {
 931  	req, err := d.client.NewRequest(ctx, http.MethodPost, databasePath, databaseReq)
 932  	if err != nil {
 933  		return nil, nil, err
 934  	}
 935  
 936  	database := new(databaseBase)
 937  	resp, err := d.client.DoWithContext(ctx, req, database)
 938  	if err != nil {
 939  		return nil, nil, err
 940  	}
 941  
 942  	return database.Database, resp, nil
 943  }
 944  
 945  // Get will get a Managed Database with the given databaseID
 946  func (d *DatabaseServiceHandler) Get(ctx context.Context, databaseID string) (*Database, *http.Response, error) {
 947  	uri := fmt.Sprintf("%s/%s", databasePath, databaseID)
 948  
 949  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
 950  	if err != nil {
 951  		return nil, nil, err
 952  	}
 953  
 954  	database := new(databaseBase)
 955  	resp, err := d.client.DoWithContext(ctx, req, database)
 956  	if err != nil {
 957  		return nil, nil, err
 958  	}
 959  
 960  	return database.Database, resp, nil
 961  }
 962  
 963  // Update will update a Managed Database with the given parameters
 964  func (d *DatabaseServiceHandler) Update(ctx context.Context, databaseID string, databaseReq *DatabaseUpdateReq) (*Database, *http.Response, error) { //nolint:lll
 965  	uri := fmt.Sprintf("%s/%s", databasePath, databaseID)
 966  
 967  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseReq)
 968  	if err != nil {
 969  		return nil, nil, err
 970  	}
 971  
 972  	database := new(databaseBase)
 973  	resp, err := d.client.DoWithContext(ctx, req, database)
 974  	if err != nil {
 975  		return nil, nil, err
 976  	}
 977  
 978  	return database.Database, resp, nil
 979  }
 980  
 981  // Delete a Managed database, all data will be permanently lost
 982  func (d *DatabaseServiceHandler) Delete(ctx context.Context, databaseID string) error {
 983  	uri := fmt.Sprintf("%s/%s", databasePath, databaseID)
 984  
 985  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
 986  	if err != nil {
 987  		return err
 988  	}
 989  
 990  	_, err = d.client.DoWithContext(ctx, req, nil)
 991  	return err
 992  }
 993  
 994  // GetUsage retrieves disk, memory, and CPU usage information for a Managed Database
 995  func (d *DatabaseServiceHandler) GetUsage(ctx context.Context, databaseID string) (*DatabaseUsage, *http.Response, error) {
 996  	uri := fmt.Sprintf("%s/%s/usage", databasePath, databaseID)
 997  
 998  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
 999  	if err != nil {
1000  		return nil, nil, err
1001  	}
1002  
1003  	databaseUsage := new(databaseUsageBase)
1004  	resp, err := d.client.DoWithContext(ctx, req, databaseUsage)
1005  	if err != nil {
1006  		return nil, nil, err
1007  	}
1008  
1009  	return databaseUsage.Usage, resp, nil
1010  }
1011  
1012  // ListUsers retrieves all database users on a Managed Database
1013  func (d *DatabaseServiceHandler) ListUsers(ctx context.Context, databaseID string) ([]DatabaseUser, *Meta, *http.Response, error) { //nolint:dupl,lll
1014  	uri := fmt.Sprintf("%s/%s/users", databasePath, databaseID)
1015  
1016  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1017  	if err != nil {
1018  		return nil, nil, nil, err
1019  	}
1020  
1021  	databaseUsers := new(databaseUsersBase)
1022  	resp, err := d.client.DoWithContext(ctx, req, databaseUsers)
1023  	if err != nil {
1024  		return nil, nil, nil, err
1025  	}
1026  
1027  	return databaseUsers.DatabaseUsers, databaseUsers.Meta, resp, nil
1028  }
1029  
1030  // CreateUser will create a user within a Managed Database with the given parameters
1031  func (d *DatabaseServiceHandler) CreateUser(ctx context.Context, databaseID string, databaseUserReq *DatabaseUserCreateReq) (*DatabaseUser, *http.Response, error) { //nolint:lll
1032  	uri := fmt.Sprintf("%s/%s/users", databasePath, databaseID)
1033  
1034  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseUserReq)
1035  	if err != nil {
1036  		return nil, nil, err
1037  	}
1038  
1039  	databaseUser := new(databaseUserBase)
1040  	resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1041  	if err != nil {
1042  		return nil, nil, err
1043  	}
1044  
1045  	return databaseUser.DatabaseUser, resp, nil
1046  }
1047  
1048  // GetUser retrieves information on an individual user within a Managed Database based on a username and databaseID
1049  func (d *DatabaseServiceHandler) GetUser(ctx context.Context, databaseID, username string) (*DatabaseUser, *http.Response, error) {
1050  	uri := fmt.Sprintf("%s/%s/users/%s", databasePath, databaseID, username)
1051  
1052  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1053  	if err != nil {
1054  		return nil, nil, err
1055  	}
1056  
1057  	databaseUser := new(databaseUserBase)
1058  	resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1059  	if err != nil {
1060  		return nil, nil, err
1061  	}
1062  
1063  	return databaseUser.DatabaseUser, resp, nil
1064  }
1065  
1066  // UpdateUser will update a user within a Managed Database with the given parameters
1067  func (d *DatabaseServiceHandler) UpdateUser(ctx context.Context, databaseID, username string, databaseUserReq *DatabaseUserUpdateReq) (*DatabaseUser, *http.Response, error) { //nolint:lll,dupl
1068  	uri := fmt.Sprintf("%s/%s/users/%s", databasePath, databaseID, username)
1069  
1070  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseUserReq)
1071  	if err != nil {
1072  		return nil, nil, err
1073  	}
1074  
1075  	databaseUser := new(databaseUserBase)
1076  	resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1077  	if err != nil {
1078  		return nil, nil, err
1079  	}
1080  
1081  	return databaseUser.DatabaseUser, resp, nil
1082  }
1083  
1084  // DeleteUser will delete a user within a Managed Database
1085  func (d *DatabaseServiceHandler) DeleteUser(ctx context.Context, databaseID, username string) error {
1086  	uri := fmt.Sprintf("%s/%s/users/%s", databasePath, databaseID, username)
1087  
1088  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1089  	if err != nil {
1090  		return err
1091  	}
1092  
1093  	_, err = d.client.DoWithContext(ctx, req, nil)
1094  	return err
1095  }
1096  
1097  // UpdateUserACL will update a user's access control within the Valkey Managed Database
1098  func (d *DatabaseServiceHandler) UpdateUserACL(ctx context.Context, databaseID, username string, databaseUserACLReq *DatabaseUserACLReq) (*DatabaseUser, *http.Response, error) { //nolint:lll,dupl
1099  	uri := fmt.Sprintf("%s/%s/users/%s/access-control", databasePath, databaseID, username)
1100  
1101  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseUserACLReq)
1102  	if err != nil {
1103  		return nil, nil, err
1104  	}
1105  
1106  	databaseUser := new(databaseUserBase)
1107  	resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1108  	if err != nil {
1109  		return nil, nil, err
1110  	}
1111  
1112  	return databaseUser.DatabaseUser, resp, nil
1113  }
1114  
1115  // ListDBs retrieves all logical databases on a Managed Database
1116  func (d *DatabaseServiceHandler) ListDBs(ctx context.Context, databaseID string) ([]DatabaseDB, *Meta, *http.Response, error) { //nolint:dupl,lll
1117  	uri := fmt.Sprintf("%s/%s/dbs", databasePath, databaseID)
1118  
1119  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1120  	if err != nil {
1121  		return nil, nil, nil, err
1122  	}
1123  
1124  	databaseDBs := new(databaseDBsBase)
1125  	resp, err := d.client.DoWithContext(ctx, req, databaseDBs)
1126  	if err != nil {
1127  		return nil, nil, nil, err
1128  	}
1129  
1130  	return databaseDBs.DatabaseDBs, databaseDBs.Meta, resp, nil
1131  }
1132  
1133  // CreateDB will create a logical database within a Managed Database with the given parameters
1134  func (d *DatabaseServiceHandler) CreateDB(ctx context.Context, databaseID string, databaseDBReq *DatabaseDBCreateReq) (*DatabaseDB, *http.Response, error) { //nolint:lll
1135  	uri := fmt.Sprintf("%s/%s/dbs", databasePath, databaseID)
1136  
1137  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseDBReq)
1138  	if err != nil {
1139  		return nil, nil, err
1140  	}
1141  
1142  	databaseDB := new(databaseDBBase)
1143  	resp, err := d.client.DoWithContext(ctx, req, databaseDB)
1144  	if err != nil {
1145  		return nil, nil, err
1146  	}
1147  
1148  	return databaseDB.DatabaseDB, resp, nil
1149  }
1150  
1151  // GetDB retrieves information on an individual logical database within a Managed Database based on a dbname and databaseID
1152  func (d *DatabaseServiceHandler) GetDB(ctx context.Context, databaseID, dbname string) (*DatabaseDB, *http.Response, error) {
1153  	uri := fmt.Sprintf("%s/%s/dbs/%s", databasePath, databaseID, dbname)
1154  
1155  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1156  	if err != nil {
1157  		return nil, nil, err
1158  	}
1159  
1160  	databaseDB := new(databaseDBBase)
1161  	resp, err := d.client.DoWithContext(ctx, req, databaseDB)
1162  	if err != nil {
1163  		return nil, nil, err
1164  	}
1165  
1166  	return databaseDB.DatabaseDB, resp, nil
1167  }
1168  
1169  // DeleteDB will delete a user within a Managed Database
1170  func (d *DatabaseServiceHandler) DeleteDB(ctx context.Context, databaseID, dbname string) error {
1171  	uri := fmt.Sprintf("%s/%s/dbs/%s", databasePath, databaseID, dbname)
1172  
1173  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1174  	if err != nil {
1175  		return err
1176  	}
1177  
1178  	_, err = d.client.DoWithContext(ctx, req, nil)
1179  	return err
1180  }
1181  
1182  // ListTopics retrieves all Kafka topics on a Managed Database
1183  func (d *DatabaseServiceHandler) ListTopics(ctx context.Context, databaseID string) ([]DatabaseTopic, *Meta, *http.Response, error) { //nolint:dupl,lll
1184  	uri := fmt.Sprintf("%s/%s/topics", databasePath, databaseID)
1185  
1186  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1187  	if err != nil {
1188  		return nil, nil, nil, err
1189  	}
1190  
1191  	databaseTopics := new(databaseTopicsBase)
1192  	resp, err := d.client.DoWithContext(ctx, req, databaseTopics)
1193  	if err != nil {
1194  		return nil, nil, nil, err
1195  	}
1196  
1197  	return databaseTopics.DatabaseTopics, databaseTopics.Meta, resp, nil
1198  }
1199  
1200  // CreateTopic will create a Kafka topic within a Managed Database with the given parameters
1201  func (d *DatabaseServiceHandler) CreateTopic(ctx context.Context, databaseID string, databaseTopicReq *DatabaseTopicCreateReq) (*DatabaseTopic, *http.Response, error) { //nolint:lll
1202  	uri := fmt.Sprintf("%s/%s/topics", databasePath, databaseID)
1203  
1204  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseTopicReq)
1205  	if err != nil {
1206  		return nil, nil, err
1207  	}
1208  
1209  	databaseTopic := new(databaseTopicBase)
1210  	resp, err := d.client.DoWithContext(ctx, req, databaseTopic)
1211  	if err != nil {
1212  		return nil, nil, err
1213  	}
1214  
1215  	return databaseTopic.DatabaseTopic, resp, nil
1216  }
1217  
1218  // GetTopic retrieves information on an individual Kafka topic within a Managed Database based on a topicName and databaseID
1219  func (d *DatabaseServiceHandler) GetTopic(ctx context.Context, databaseID, topicName string) (*DatabaseTopic, *http.Response, error) {
1220  	uri := fmt.Sprintf("%s/%s/topics/%s", databasePath, databaseID, topicName)
1221  
1222  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1223  	if err != nil {
1224  		return nil, nil, err
1225  	}
1226  
1227  	databaseTopic := new(databaseTopicBase)
1228  	resp, err := d.client.DoWithContext(ctx, req, databaseTopic)
1229  	if err != nil {
1230  		return nil, nil, err
1231  	}
1232  
1233  	return databaseTopic.DatabaseTopic, resp, nil
1234  }
1235  
1236  // UpdateTopic will update a Kafka topic within a Managed Database with the given parameters
1237  func (d *DatabaseServiceHandler) UpdateTopic(ctx context.Context, databaseID, topicName string, databaseTopicReq *DatabaseTopicUpdateReq) (*DatabaseTopic, *http.Response, error) { //nolint:lll,dupl
1238  	uri := fmt.Sprintf("%s/%s/topics/%s", databasePath, databaseID, topicName)
1239  
1240  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseTopicReq)
1241  	if err != nil {
1242  		return nil, nil, err
1243  	}
1244  
1245  	databaseTopic := new(databaseTopicBase)
1246  	resp, err := d.client.DoWithContext(ctx, req, databaseTopic)
1247  	if err != nil {
1248  		return nil, nil, err
1249  	}
1250  
1251  	return databaseTopic.DatabaseTopic, resp, nil
1252  }
1253  
1254  // DeleteTopic will delete a Kafka topic within a Managed Database
1255  func (d *DatabaseServiceHandler) DeleteTopic(ctx context.Context, databaseID, topicName string) error {
1256  	uri := fmt.Sprintf("%s/%s/topics/%s", databasePath, databaseID, topicName)
1257  
1258  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1259  	if err != nil {
1260  		return err
1261  	}
1262  
1263  	_, err = d.client.DoWithContext(ctx, req, nil)
1264  	return err
1265  }
1266  
1267  // ListQuotas retrieves all Kafka quotas on a Managed Database
1268  func (d *DatabaseServiceHandler) ListQuotas(ctx context.Context, databaseID string) ([]DatabaseQuota, *Meta, *http.Response, error) { //nolint:dupl,lll
1269  	uri := fmt.Sprintf("%s/%s/quotas", databasePath, databaseID)
1270  
1271  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1272  	if err != nil {
1273  		return nil, nil, nil, err
1274  	}
1275  
1276  	databaseQuotas := new(databaseQuotasBase)
1277  	resp, err := d.client.DoWithContext(ctx, req, databaseQuotas)
1278  	if err != nil {
1279  		return nil, nil, nil, err
1280  	}
1281  
1282  	return databaseQuotas.DatabaseQuotas, databaseQuotas.Meta, resp, nil
1283  }
1284  
1285  // CreateQuota will create a Kafka quota within a Managed Database with the given parameters
1286  func (d *DatabaseServiceHandler) CreateQuota(ctx context.Context, databaseID string, databaseQuotaReq *DatabaseQuotaCreateReq) (*DatabaseQuota, *http.Response, error) { //nolint:lll
1287  	uri := fmt.Sprintf("%s/%s/quotas", databasePath, databaseID)
1288  
1289  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseQuotaReq)
1290  	if err != nil {
1291  		return nil, nil, err
1292  	}
1293  
1294  	databaseQuota := new(databaseQuotaBase)
1295  	resp, err := d.client.DoWithContext(ctx, req, databaseQuota)
1296  	if err != nil {
1297  		return nil, nil, err
1298  	}
1299  
1300  	return databaseQuota.DatabaseQuota, resp, nil
1301  }
1302  
1303  // GetQuota retrieves information on an individual Kafka quota within a Managed Database based on a clientID and databaseID
1304  func (d *DatabaseServiceHandler) GetQuota(ctx context.Context, databaseID, clientID, username string) (*DatabaseQuota, *http.Response, error) { //nolint:lll
1305  	uri := fmt.Sprintf("%s/%s/quotas/%s/%s", databasePath, databaseID, clientID, username)
1306  
1307  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1308  	if err != nil {
1309  		return nil, nil, err
1310  	}
1311  
1312  	databaseQuota := new(databaseQuotaBase)
1313  	resp, err := d.client.DoWithContext(ctx, req, databaseQuota)
1314  	if err != nil {
1315  		return nil, nil, err
1316  	}
1317  
1318  	return databaseQuota.DatabaseQuota, resp, nil
1319  }
1320  
1321  // UpdateQuota will update a Kafka quota within a Managed Database with the given parameters
1322  func (d *DatabaseServiceHandler) UpdateQuota(ctx context.Context, databaseID, clientID, username string, databaseQuotaReq *DatabaseQuotaUpdateReq) (*DatabaseQuota, *http.Response, error) { //nolint:lll
1323  	uri := fmt.Sprintf("%s/%s/quotas/%s/%s", databasePath, databaseID, clientID, username)
1324  
1325  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseQuotaReq)
1326  	if err != nil {
1327  		return nil, nil, err
1328  	}
1329  
1330  	databaseQuota := new(databaseQuotaBase)
1331  	resp, err := d.client.DoWithContext(ctx, req, databaseQuota)
1332  	if err != nil {
1333  		return nil, nil, err
1334  	}
1335  
1336  	return databaseQuota.DatabaseQuota, resp, nil
1337  }
1338  
1339  // DeleteQuota will delete a Kafka quota within a Managed Database
1340  func (d *DatabaseServiceHandler) DeleteQuota(ctx context.Context, databaseID, clientID, username string) error {
1341  	uri := fmt.Sprintf("%s/%s/quotas/%s/%s", databasePath, databaseID, clientID, username)
1342  
1343  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1344  	if err != nil {
1345  		return err
1346  	}
1347  
1348  	_, err = d.client.DoWithContext(ctx, req, nil)
1349  	return err
1350  }
1351  
1352  // ListMaintenanceUpdates retrieves all available maintenance updates for a Managed Database
1353  func (d *DatabaseServiceHandler) ListMaintenanceUpdates(ctx context.Context, databaseID string) ([]string, *http.Response, error) {
1354  	uri := fmt.Sprintf("%s/%s/maintenance", databasePath, databaseID)
1355  
1356  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1357  	if err != nil {
1358  		return nil, nil, err
1359  	}
1360  
1361  	databaseUpdates := new(databaseUpdatesBase)
1362  	resp, err := d.client.DoWithContext(ctx, req, databaseUpdates)
1363  	if err != nil {
1364  		return nil, nil, err
1365  	}
1366  
1367  	return databaseUpdates.AvailableUpdates, resp, nil
1368  }
1369  
1370  // StartMaintenance will start the maintenance update process for a Managed Database
1371  func (d *DatabaseServiceHandler) StartMaintenance(ctx context.Context, databaseID string) (string, *http.Response, error) {
1372  	uri := fmt.Sprintf("%s/%s/maintenance", databasePath, databaseID)
1373  
1374  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1375  	if err != nil {
1376  		return "", nil, err
1377  	}
1378  
1379  	databaseUpdates := new(databaseMessage)
1380  	resp, err := d.client.DoWithContext(ctx, req, databaseUpdates)
1381  	if err != nil {
1382  		return "", nil, err
1383  	}
1384  
1385  	return databaseUpdates.Message, resp, nil
1386  }
1387  
1388  // ListAvailableConnectors retrieves all available Kafka connectors for a Managed Database
1389  func (d *DatabaseServiceHandler) ListAvailableConnectors(ctx context.Context, databaseID string) ([]DatabaseAvailableConnector, *http.Response, error) { //nolint:lll
1390  	uri := fmt.Sprintf("%s/%s/available-connectors", databasePath, databaseID)
1391  
1392  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1393  	if err != nil {
1394  		return nil, nil, err
1395  	}
1396  
1397  	databaseAvailableConnectors := new(databaseAvailableConnectorsBase)
1398  	resp, err := d.client.DoWithContext(ctx, req, databaseAvailableConnectors)
1399  	if err != nil {
1400  		return nil, nil, err
1401  	}
1402  
1403  	return databaseAvailableConnectors.DatabaseAvailableConnectors, resp, nil
1404  }
1405  
1406  // GetConnectorConfigurationSchema retrieves all available configuration options for a Kafka connector on a Managed Database
1407  func (d *DatabaseServiceHandler) GetConnectorConfigurationSchema(ctx context.Context, databaseID, connectorClass string) ([]DatabaseConnectorConfigurationOption, *http.Response, error) { //nolint:lll
1408  	uri := fmt.Sprintf("%s/%s/available-connectors/%s/configuration", databasePath, databaseID, connectorClass)
1409  
1410  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1411  	if err != nil {
1412  		return nil, nil, err
1413  	}
1414  
1415  	databaseConnectorConfigurationSchema := new(databaseConnectorConfigBase)
1416  	resp, err := d.client.DoWithContext(ctx, req, databaseConnectorConfigurationSchema)
1417  	if err != nil {
1418  		return nil, nil, err
1419  	}
1420  
1421  	return databaseConnectorConfigurationSchema.ConfigurationSchema, resp, nil
1422  }
1423  
1424  // ListConnectors retrieves all Kafka connectors on a Managed Database
1425  func (d *DatabaseServiceHandler) ListConnectors(ctx context.Context, databaseID string) ([]DatabaseConnector, *Meta, *http.Response, error) { //nolint:dupl,lll
1426  	uri := fmt.Sprintf("%s/%s/connectors", databasePath, databaseID)
1427  
1428  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1429  	if err != nil {
1430  		return nil, nil, nil, err
1431  	}
1432  
1433  	databaseConnectors := new(databaseConnectorsBase)
1434  	resp, err := d.client.DoWithContext(ctx, req, databaseConnectors)
1435  	if err != nil {
1436  		return nil, nil, nil, err
1437  	}
1438  
1439  	return databaseConnectors.DatabaseConnectors, databaseConnectors.Meta, resp, nil
1440  }
1441  
1442  // CreateConnector will create a Kafka connector within a Managed Database with the given parameters
1443  func (d *DatabaseServiceHandler) CreateConnector(ctx context.Context, databaseID string, databaseConnectorReq *DatabaseConnectorCreateReq) (*DatabaseConnector, *http.Response, error) { //nolint:lll
1444  	uri := fmt.Sprintf("%s/%s/connectors", databasePath, databaseID)
1445  
1446  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseConnectorReq)
1447  	if err != nil {
1448  		return nil, nil, err
1449  	}
1450  
1451  	databaseConnector := new(databaseConnectorBase)
1452  	resp, err := d.client.DoWithContext(ctx, req, databaseConnector)
1453  	if err != nil {
1454  		return nil, nil, err
1455  	}
1456  
1457  	return databaseConnector.DatabaseConnector, resp, nil
1458  }
1459  
1460  // GetConnector retrieves information on an individual Kafka connector within a Managed Database based on a connectorName and databaseID
1461  func (d *DatabaseServiceHandler) GetConnector(ctx context.Context, databaseID, connectorName string) (*DatabaseConnector, *http.Response, error) { //nolint:lll
1462  	uri := fmt.Sprintf("%s/%s/connectors/%s", databasePath, databaseID, connectorName)
1463  
1464  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1465  	if err != nil {
1466  		return nil, nil, err
1467  	}
1468  
1469  	databaseConnector := new(databaseConnectorBase)
1470  	resp, err := d.client.DoWithContext(ctx, req, databaseConnector)
1471  	if err != nil {
1472  		return nil, nil, err
1473  	}
1474  
1475  	return databaseConnector.DatabaseConnector, resp, nil
1476  }
1477  
1478  // UpdateConnector will update a Kafka connector within a Managed Database with the given parameters
1479  func (d *DatabaseServiceHandler) UpdateConnector(ctx context.Context, databaseID, connectorName string, databaseConnectorReq *DatabaseConnectorUpdateReq) (*DatabaseConnector, *http.Response, error) { //nolint:lll,dupl
1480  	uri := fmt.Sprintf("%s/%s/connectors/%s", databasePath, databaseID, connectorName)
1481  
1482  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseConnectorReq)
1483  	if err != nil {
1484  		return nil, nil, err
1485  	}
1486  
1487  	databaseConnector := new(databaseConnectorBase)
1488  	resp, err := d.client.DoWithContext(ctx, req, databaseConnector)
1489  	if err != nil {
1490  		return nil, nil, err
1491  	}
1492  
1493  	return databaseConnector.DatabaseConnector, resp, nil
1494  }
1495  
1496  // DeleteConnector will delete a Kafka connector within a Managed Database
1497  func (d *DatabaseServiceHandler) DeleteConnector(ctx context.Context, databaseID, connectorName string) error {
1498  	uri := fmt.Sprintf("%s/%s/connectors/%s", databasePath, databaseID, connectorName)
1499  
1500  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1501  	if err != nil {
1502  		return err
1503  	}
1504  
1505  	_, err = d.client.DoWithContext(ctx, req, nil)
1506  	return err
1507  }
1508  
1509  // GetConnectorStatus retrieves the status of a Kafka connector within a Managed Database based on a connectorName and databaseID
1510  func (d *DatabaseServiceHandler) GetConnectorStatus(ctx context.Context, databaseID, connectorName string) (*DatabaseConnectorStatus, *http.Response, error) { //nolint:lll
1511  	uri := fmt.Sprintf("%s/%s/connectors/%s/status", databasePath, databaseID, connectorName)
1512  
1513  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1514  	if err != nil {
1515  		return nil, nil, err
1516  	}
1517  
1518  	databaseConnectorStatus := new(databaseConnectorStatusBase)
1519  	resp, err := d.client.DoWithContext(ctx, req, databaseConnectorStatus)
1520  	if err != nil {
1521  		return nil, nil, err
1522  	}
1523  
1524  	return databaseConnectorStatus.ConnectorStatus, resp, nil
1525  }
1526  
1527  // RestartConnector will restart a Kafka connector within a Managed Database
1528  func (d *DatabaseServiceHandler) RestartConnector(ctx context.Context, databaseID, connectorName string) error {
1529  	uri := fmt.Sprintf("%s/%s/connectors/%s/restart", databasePath, databaseID, connectorName)
1530  
1531  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1532  	if err != nil {
1533  		return err
1534  	}
1535  
1536  	_, err = d.client.DoWithContext(ctx, req, nil)
1537  	return err
1538  }
1539  
1540  // PauseConnector will pause a Kafka connector within a Managed Database
1541  func (d *DatabaseServiceHandler) PauseConnector(ctx context.Context, databaseID, connectorName string) error {
1542  	uri := fmt.Sprintf("%s/%s/connectors/%s/pause", databasePath, databaseID, connectorName)
1543  
1544  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1545  	if err != nil {
1546  		return err
1547  	}
1548  
1549  	_, err = d.client.DoWithContext(ctx, req, nil)
1550  	return err
1551  }
1552  
1553  // ResumeConnector will resume a paused Kafka connector within a Managed Database
1554  func (d *DatabaseServiceHandler) ResumeConnector(ctx context.Context, databaseID, connectorName string) error {
1555  	uri := fmt.Sprintf("%s/%s/connectors/%s/resume", databasePath, databaseID, connectorName)
1556  
1557  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1558  	if err != nil {
1559  		return err
1560  	}
1561  
1562  	_, err = d.client.DoWithContext(ctx, req, nil)
1563  	return err
1564  }
1565  
1566  // RestartConnectorTask will restart a Kafka connector task within a Managed Database
1567  func (d *DatabaseServiceHandler) RestartConnectorTask(ctx context.Context, databaseID, connectorName string, taskID int) error {
1568  	uri := fmt.Sprintf("%s/%s/connectors/%s/tasks/%d/restart", databasePath, databaseID, connectorName, taskID)
1569  
1570  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1571  	if err != nil {
1572  		return err
1573  	}
1574  
1575  	_, err = d.client.DoWithContext(ctx, req, nil)
1576  	return err
1577  }
1578  
1579  // ListServiceAlerts queries for service alerts for a Managed Database using the given parameters
1580  func (d *DatabaseServiceHandler) ListServiceAlerts(ctx context.Context, databaseID string, databaseAlertsReq *DatabaseListAlertsReq) ([]DatabaseAlert, *http.Response, error) { //nolint:lll
1581  	uri := fmt.Sprintf("%s/%s/alerts", databasePath, databaseID)
1582  
1583  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseAlertsReq)
1584  	if err != nil {
1585  		return nil, nil, err
1586  	}
1587  
1588  	databaseAlerts := new(databaseAlertsBase)
1589  	resp, err := d.client.DoWithContext(ctx, req, databaseAlerts)
1590  	if err != nil {
1591  		return nil, nil, err
1592  	}
1593  
1594  	return databaseAlerts.DatabaseAlerts, resp, nil
1595  }
1596  
1597  // GetMigrationStatus retrieves the migration status for a Managed Database
1598  func (d *DatabaseServiceHandler) GetMigrationStatus(ctx context.Context, databaseID string) (*DatabaseMigration, *http.Response, error) {
1599  	uri := fmt.Sprintf("%s/%s/migration", databasePath, databaseID)
1600  
1601  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1602  	if err != nil {
1603  		return nil, nil, err
1604  	}
1605  
1606  	databaseMigration := new(databaseMigrationBase)
1607  	resp, err := d.client.DoWithContext(ctx, req, databaseMigration)
1608  	if err != nil {
1609  		return nil, nil, err
1610  	}
1611  
1612  	return databaseMigration.Migration, resp, nil
1613  }
1614  
1615  // StartMigration will start a migration for a Managed Database using the given credentials
1616  func (d *DatabaseServiceHandler) StartMigration(ctx context.Context, databaseID string, databaseMigrationReq *DatabaseMigrationStartReq) (*DatabaseMigration, *http.Response, error) { //nolint:lll
1617  	uri := fmt.Sprintf("%s/%s/migration", databasePath, databaseID)
1618  
1619  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseMigrationReq)
1620  	if err != nil {
1621  		return nil, nil, err
1622  	}
1623  
1624  	databaseMigration := new(databaseMigrationBase)
1625  	resp, err := d.client.DoWithContext(ctx, req, databaseMigration)
1626  	if err != nil {
1627  		return nil, nil, err
1628  	}
1629  
1630  	return databaseMigration.Migration, resp, nil
1631  }
1632  
1633  // DetachMigration will detach a migration from a Managed Database
1634  func (d *DatabaseServiceHandler) DetachMigration(ctx context.Context, databaseID string) error {
1635  	uri := fmt.Sprintf("%s/%s/migration", databasePath, databaseID)
1636  
1637  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1638  	if err != nil {
1639  		return err
1640  	}
1641  
1642  	_, err = d.client.DoWithContext(ctx, req, nil)
1643  	return err
1644  }
1645  
1646  // AddReadOnlyReplica will add a read-only replica node to a Managed Database with the given parameters
1647  func (d *DatabaseServiceHandler) AddReadOnlyReplica(ctx context.Context, databaseID string, databaseReplicaReq *DatabaseAddReplicaReq) (*Database, *http.Response, error) { //nolint:lll
1648  	uri := fmt.Sprintf("%s/%s/read-replica", databasePath, databaseID)
1649  
1650  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseReplicaReq)
1651  	if err != nil {
1652  		return nil, nil, err
1653  	}
1654  
1655  	database := new(databaseBase)
1656  	resp, err := d.client.DoWithContext(ctx, req, database)
1657  	if err != nil {
1658  		return nil, nil, err
1659  	}
1660  
1661  	return database.Database, resp, nil
1662  }
1663  
1664  // PromoteReadReplica will promote a read-only replica to its own standalone Managed Database subscription
1665  func (d *DatabaseServiceHandler) PromoteReadReplica(ctx context.Context, databaseID string) error {
1666  	uri := fmt.Sprintf("%s/%s/promote-read-replica", databasePath, databaseID)
1667  
1668  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1669  	if err != nil {
1670  		return err
1671  	}
1672  
1673  	_, err = d.client.DoWithContext(ctx, req, nil)
1674  	return err
1675  }
1676  
1677  // GetBackupInformation retrieves backup information for a Managed Database
1678  func (d *DatabaseServiceHandler) GetBackupInformation(ctx context.Context, databaseID string) (*DatabaseBackups, *http.Response, error) {
1679  	uri := fmt.Sprintf("%s/%s/backups", databasePath, databaseID)
1680  
1681  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1682  	if err != nil {
1683  		return nil, nil, err
1684  	}
1685  
1686  	databaseBackups := new(DatabaseBackups)
1687  	resp, err := d.client.DoWithContext(ctx, req, databaseBackups)
1688  	if err != nil {
1689  		return nil, nil, err
1690  	}
1691  
1692  	return databaseBackups, resp, nil
1693  }
1694  
1695  // RestoreFromBackup will create a new subscription of the same plan from a backup of a Managed Database using the given parameters
1696  func (d *DatabaseServiceHandler) RestoreFromBackup(ctx context.Context, databaseID string, databaseRestoreReq *DatabaseBackupRestoreReq) (*Database, *http.Response, error) { //nolint:lll
1697  	uri := fmt.Sprintf("%s/%s/restore", databasePath, databaseID)
1698  
1699  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseRestoreReq)
1700  	if err != nil {
1701  		return nil, nil, err
1702  	}
1703  
1704  	database := new(databaseBase)
1705  	resp, err := d.client.DoWithContext(ctx, req, database)
1706  	if err != nil {
1707  		return nil, nil, err
1708  	}
1709  
1710  	return database.Database, resp, nil
1711  }
1712  
1713  // Fork will create a new subscription of any plan from a backup of a Managed Database using the given parameters
1714  func (d *DatabaseServiceHandler) Fork(ctx context.Context, databaseID string, databaseForkReq *DatabaseForkReq) (*Database, *http.Response, error) { //nolint:lll
1715  	uri := fmt.Sprintf("%s/%s/fork", databasePath, databaseID)
1716  
1717  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseForkReq)
1718  	if err != nil {
1719  		return nil, nil, err
1720  	}
1721  
1722  	database := new(databaseBase)
1723  	resp, err := d.client.DoWithContext(ctx, req, database)
1724  	if err != nil {
1725  		return nil, nil, err
1726  	}
1727  
1728  	return database.Database, resp, nil
1729  }
1730  
1731  // ListConnectionPools retrieves all connection pools within your PostgreSQL Managed Database
1732  func (d *DatabaseServiceHandler) ListConnectionPools(ctx context.Context, databaseID string) (*DatabaseConnections, []DatabaseConnectionPool, *Meta, *http.Response, error) { //nolint:lll
1733  	uri := fmt.Sprintf("%s/%s/connection-pools", databasePath, databaseID)
1734  
1735  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1736  	if err != nil {
1737  		return nil, nil, nil, nil, err
1738  	}
1739  
1740  	databaseConnectionPools := new(databaseConnectionPoolsBase)
1741  	resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPools)
1742  	if err != nil {
1743  		return nil, nil, nil, nil, err
1744  	}
1745  
1746  	return databaseConnectionPools.Connections, databaseConnectionPools.ConnectionPools, databaseConnectionPools.Meta, resp, nil
1747  }
1748  
1749  // CreateConnectionPool will create a connection pool within the PostgreSQL Managed Database with the given parameters
1750  func (d *DatabaseServiceHandler) CreateConnectionPool(ctx context.Context, databaseID string, databaseConnectionPoolReq *DatabaseConnectionPoolCreateReq) (*DatabaseConnectionPool, *http.Response, error) { //nolint:lll
1751  	uri := fmt.Sprintf("%s/%s/connection-pools", databasePath, databaseID)
1752  
1753  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseConnectionPoolReq)
1754  	if err != nil {
1755  		return nil, nil, err
1756  	}
1757  
1758  	databaseConnectionPool := new(databaseConnectionPoolBase)
1759  	resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPool)
1760  	if err != nil {
1761  		return nil, nil, err
1762  	}
1763  
1764  	return databaseConnectionPool.ConnectionPool, resp, nil
1765  }
1766  
1767  // GetConnectionPool retrieves information on an individual connection pool
1768  // within a PostgreSQL Managed Database based on a poolName and databaseID
1769  func (d *DatabaseServiceHandler) GetConnectionPool(ctx context.Context, databaseID, poolName string) (*DatabaseConnectionPool, *http.Response, error) { //nolint:lll
1770  	uri := fmt.Sprintf("%s/%s/connection-pools/%s", databasePath, databaseID, poolName)
1771  
1772  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1773  	if err != nil {
1774  		return nil, nil, err
1775  	}
1776  
1777  	databaseConnectionPool := new(databaseConnectionPoolBase)
1778  	resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPool)
1779  	if err != nil {
1780  		return nil, nil, err
1781  	}
1782  
1783  	return databaseConnectionPool.ConnectionPool, resp, nil
1784  }
1785  
1786  // UpdateConnectionPool will update a connection pool within the PostgreSQL Managed Database with the given parameters
1787  func (d *DatabaseServiceHandler) UpdateConnectionPool(ctx context.Context, databaseID, poolName string, databaseConnectionPoolReq *DatabaseConnectionPoolUpdateReq) (*DatabaseConnectionPool, *http.Response, error) { //nolint:lll,dupl
1788  	uri := fmt.Sprintf("%s/%s/connection-pools/%s", databasePath, databaseID, poolName)
1789  
1790  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseConnectionPoolReq)
1791  	if err != nil {
1792  		return nil, nil, err
1793  	}
1794  
1795  	databaseConnectionPool := new(databaseConnectionPoolBase)
1796  	resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPool)
1797  	if err != nil {
1798  		return nil, nil, err
1799  	}
1800  
1801  	return databaseConnectionPool.ConnectionPool, resp, nil
1802  }
1803  
1804  // DeleteConnectionPool will delete a connection pool within a Managed Database
1805  func (d *DatabaseServiceHandler) DeleteConnectionPool(ctx context.Context, databaseID, poolName string) error {
1806  	uri := fmt.Sprintf("%s/%s/connection-pools/%s", databasePath, databaseID, poolName)
1807  
1808  	req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1809  	if err != nil {
1810  		return err
1811  	}
1812  
1813  	_, err = d.client.DoWithContext(ctx, req, nil)
1814  	return err
1815  }
1816  
1817  // ListAdvancedOptions retrieves all current and available advanced configuration options within a Managed Database
1818  func (d *DatabaseServiceHandler) ListAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1819  	uri := fmt.Sprintf("%s/%s/advanced-options", databasePath, databaseID)
1820  
1821  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1822  	if err != nil {
1823  		return nil, nil, nil, err
1824  	}
1825  
1826  	databaseAdvancedOptions := new(databaseAdvancedOptionsBase)
1827  	resp, err := d.client.DoWithContext(ctx, req, databaseAdvancedOptions)
1828  	if err != nil {
1829  		return nil, nil, nil, err
1830  	}
1831  
1832  	return databaseAdvancedOptions.ConfiguredOptions, databaseAdvancedOptions.AvailableOptions, resp, nil
1833  }
1834  
1835  // UpdateAdvancedOptions will update advanced configuration options within a Managed Database with the given parameters
1836  func (d *DatabaseServiceHandler) UpdateAdvancedOptions(ctx context.Context, databaseID string, databaseAdvancedOptionsReq *DatabaseAdvancedOptions) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1837  	uri := fmt.Sprintf("%s/%s/advanced-options", databasePath, databaseID)
1838  
1839  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseAdvancedOptionsReq)
1840  	if err != nil {
1841  		return nil, nil, nil, err
1842  	}
1843  
1844  	databaseAdvancedOptions := new(databaseAdvancedOptionsBase)
1845  	resp, err := d.client.DoWithContext(ctx, req, databaseAdvancedOptions)
1846  	if err != nil {
1847  		return nil, nil, nil, err
1848  	}
1849  
1850  	return databaseAdvancedOptions.ConfiguredOptions, databaseAdvancedOptions.AvailableOptions, resp, nil
1851  }
1852  
1853  // ListKafkaRESTAdvancedOptions retrieves all current and available Kafka REST advanced configuration options within a Managed Database
1854  func (d *DatabaseServiceHandler) ListKafkaRESTAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1855  	uri := fmt.Sprintf("%s/%s/advanced-options/kafka-rest", databasePath, databaseID)
1856  
1857  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1858  	if err != nil {
1859  		return nil, nil, nil, err
1860  	}
1861  
1862  	databaseKafkaRESTAdvancedOptions := new(databaseKafkaRESTAdvancedOptionsBase)
1863  	resp, err := d.client.DoWithContext(ctx, req, databaseKafkaRESTAdvancedOptions)
1864  	if err != nil {
1865  		return nil, nil, nil, err
1866  	}
1867  
1868  	return databaseKafkaRESTAdvancedOptions.ConfiguredOptions, databaseKafkaRESTAdvancedOptions.AvailableOptions, resp, nil
1869  }
1870  
1871  // UpdateKafkaRESTAdvancedOptions will update Kafka REST advanced configuration options within a Managed Database with the given parameters
1872  func (d *DatabaseServiceHandler) UpdateKafkaRESTAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaRESTAdvancedOptionsReq *DatabaseKafkaRESTAdvancedOptions) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1873  	uri := fmt.Sprintf("%s/%s/advanced-options/kafka-rest", databasePath, databaseID)
1874  
1875  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseKafkaRESTAdvancedOptionsReq)
1876  	if err != nil {
1877  		return nil, nil, nil, err
1878  	}
1879  
1880  	databaseKafkaRESTAdvancedOptions := new(databaseKafkaRESTAdvancedOptionsBase)
1881  	resp, err := d.client.DoWithContext(ctx, req, databaseKafkaRESTAdvancedOptions)
1882  	if err != nil {
1883  		return nil, nil, nil, err
1884  	}
1885  
1886  	return databaseKafkaRESTAdvancedOptions.ConfiguredOptions, databaseKafkaRESTAdvancedOptions.AvailableOptions, resp, nil
1887  }
1888  
1889  // ListSchemaRegistryAdvancedOptions retrieves all current and available Schema Registry advanced options within a Managed Database
1890  func (d *DatabaseServiceHandler) ListSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1891  	uri := fmt.Sprintf("%s/%s/advanced-options/schema-registry", databasePath, databaseID)
1892  
1893  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1894  	if err != nil {
1895  		return nil, nil, nil, err
1896  	}
1897  
1898  	databaseSchemaRegistryAdvancedOptions := new(databaseSchemaRegistryAdvancedOptionsBase)
1899  	resp, err := d.client.DoWithContext(ctx, req, databaseSchemaRegistryAdvancedOptions)
1900  	if err != nil {
1901  		return nil, nil, nil, err
1902  	}
1903  
1904  	return databaseSchemaRegistryAdvancedOptions.ConfiguredOptions, databaseSchemaRegistryAdvancedOptions.AvailableOptions, resp, nil
1905  }
1906  
1907  // UpdateSchemaRegistryAdvancedOptions will update Schema Registry advanced options within a Managed Database with the given parameters
1908  func (d *DatabaseServiceHandler) UpdateSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string, databaseSchemaRegistryAdvancedOptionsReq *DatabaseSchemaRegistryAdvancedOptions) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1909  	uri := fmt.Sprintf("%s/%s/advanced-options/schema-registry", databasePath, databaseID)
1910  
1911  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseSchemaRegistryAdvancedOptionsReq)
1912  	if err != nil {
1913  		return nil, nil, nil, err
1914  	}
1915  
1916  	databaseSchemaRegistryAdvancedOptions := new(databaseSchemaRegistryAdvancedOptionsBase)
1917  	resp, err := d.client.DoWithContext(ctx, req, databaseSchemaRegistryAdvancedOptions)
1918  	if err != nil {
1919  		return nil, nil, nil, err
1920  	}
1921  
1922  	return databaseSchemaRegistryAdvancedOptions.ConfiguredOptions, databaseSchemaRegistryAdvancedOptions.AvailableOptions, resp, nil
1923  }
1924  
1925  // ListKafkaConnectAdvancedOptions retrieves all current and available Kafka Connect advanced options within a Managed Database
1926  func (d *DatabaseServiceHandler) ListKafkaConnectAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1927  	uri := fmt.Sprintf("%s/%s/advanced-options/kafka-connect", databasePath, databaseID)
1928  
1929  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1930  	if err != nil {
1931  		return nil, nil, nil, err
1932  	}
1933  
1934  	databaseKafkaConnectAdvancedOptions := new(databaseKafkaConnectAdvancedOptionsBase)
1935  	resp, err := d.client.DoWithContext(ctx, req, databaseKafkaConnectAdvancedOptions)
1936  	if err != nil {
1937  		return nil, nil, nil, err
1938  	}
1939  
1940  	return databaseKafkaConnectAdvancedOptions.ConfiguredOptions, databaseKafkaConnectAdvancedOptions.AvailableOptions, resp, nil
1941  }
1942  
1943  // UpdateKafkaConnectAdvancedOptions will update Kafka Connect advanced options within a Managed Database with the given parameters
1944  func (d *DatabaseServiceHandler) UpdateKafkaConnectAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaConnectAdvancedOptionsReq *DatabaseKafkaConnectAdvancedOptions) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1945  	uri := fmt.Sprintf("%s/%s/advanced-options/kafka-connect", databasePath, databaseID)
1946  
1947  	req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseKafkaConnectAdvancedOptionsReq)
1948  	if err != nil {
1949  		return nil, nil, nil, err
1950  	}
1951  
1952  	databaseKafkaConnectAdvancedOptions := new(databaseKafkaConnectAdvancedOptionsBase)
1953  	resp, err := d.client.DoWithContext(ctx, req, databaseKafkaConnectAdvancedOptions)
1954  	if err != nil {
1955  		return nil, nil, nil, err
1956  	}
1957  
1958  	return databaseKafkaConnectAdvancedOptions.ConfiguredOptions, databaseKafkaConnectAdvancedOptions.AvailableOptions, resp, nil
1959  }
1960  
1961  // ListAvailableVersions retrieves all available version upgrades for a Managed Database
1962  func (d *DatabaseServiceHandler) ListAvailableVersions(ctx context.Context, databaseID string) ([]string, *http.Response, error) {
1963  	uri := fmt.Sprintf("%s/%s/version-upgrade", databasePath, databaseID)
1964  
1965  	req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1966  	if err != nil {
1967  		return nil, nil, err
1968  	}
1969  
1970  	databaseVersions := new(DatabaseAvailableVersions)
1971  	resp, err := d.client.DoWithContext(ctx, req, databaseVersions)
1972  	if err != nil {
1973  		return nil, nil, err
1974  	}
1975  
1976  	return databaseVersions.AvailableVersions, resp, nil
1977  }
1978  
1979  // StartVersionUpgrade will start a migration for a Managed Database using the given credentials
1980  func (d *DatabaseServiceHandler) StartVersionUpgrade(ctx context.Context, databaseID string, databaseVersionUpgradeReq *DatabaseVersionUpgradeReq) (string, *http.Response, error) { //nolint:lll
1981  	uri := fmt.Sprintf("%s/%s/version-upgrade", databasePath, databaseID)
1982  
1983  	req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseVersionUpgradeReq)
1984  	if err != nil {
1985  		return "", nil, err
1986  	}
1987  
1988  	databaseVersionUpgrade := new(databaseMessage)
1989  	resp, err := d.client.DoWithContext(ctx, req, databaseVersionUpgrade)
1990  	if err != nil {
1991  		return "", nil, err
1992  	}
1993  
1994  	return databaseVersionUpgrade.Message, resp, nil
1995  }
1996