github.com/aiven/aiven-go-client@v1.36.0/clickhouse_db.go (about)

     1  package aiven
     2  
     3  import "fmt"
     4  
     5  type (
     6  	// ClickhouseDatabaseHandler aiven go-client handler for Clickhouse Databases
     7  	ClickhouseDatabaseHandler struct {
     8  		client *Client
     9  	}
    10  
    11  	// ClickhouseDatabaseRequest Aiven API request
    12  	// https://api.aiven.io/v1/project/<project>/service/<service_name>/clickhouse/db
    13  	ClickhouseDatabaseRequest struct {
    14  		Database string `json:"database"`
    15  	}
    16  
    17  	// ListClickhouseDatabaseResponse Aiven API response
    18  	ListClickhouseDatabaseResponse struct {
    19  		APIResponse
    20  		Databases []ClickhouseDatabase `json:"databases"`
    21  	}
    22  
    23  	ClickhouseDatabase struct {
    24  		Engine   string `json:"engine,omitempty"`
    25  		Name     string `json:"name"`
    26  		Required bool   `json:"required,omitempty"`
    27  	}
    28  )
    29  
    30  // Create creates a ClickHouse job
    31  func (h *ClickhouseDatabaseHandler) Create(project, service, database string) error {
    32  	path := buildPath("project", project, "service", service, "clickhouse", "db")
    33  	bts, err := h.client.doPostRequest(path, ClickhouseDatabaseRequest{
    34  		Database: database,
    35  	})
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	return checkAPIResponse(bts, nil)
    41  }
    42  
    43  // List gets a list of ClickHouse database for a service
    44  func (h *ClickhouseDatabaseHandler) List(project, service string) (*ListClickhouseDatabaseResponse, error) {
    45  	path := buildPath("project", project, "service", service, "clickhouse", "db")
    46  	bts, err := h.client.doGetRequest(path, nil)
    47  	if err != nil {
    48  		return nil, err
    49  	}
    50  
    51  	var r ListClickhouseDatabaseResponse
    52  	errR := checkAPIResponse(bts, &r)
    53  
    54  	return &r, errR
    55  }
    56  
    57  // Get gets a ClickHouse database
    58  func (h *ClickhouseDatabaseHandler) Get(project, service, database string) (*ClickhouseDatabase, error) {
    59  	l, err := h.List(project, service)
    60  	if err != nil {
    61  		return nil, err
    62  	}
    63  
    64  	for _, db := range l.Databases {
    65  		if db.Name == database {
    66  			return &db, nil
    67  		}
    68  	}
    69  
    70  	return nil, Error{
    71  		Message: fmt.Sprintf("clickhouse database not found by name: %s for a service: %s", database, service),
    72  		Status:  404,
    73  	}
    74  }
    75  
    76  // Delete deletes a ClickHouse database
    77  func (h *ClickhouseDatabaseHandler) Delete(project, service, database string) error {
    78  	path := buildPath("project", project, "service", service, "clickhouse", "db", database)
    79  	bts, err := h.client.doDeleteRequest(path, nil)
    80  	if err != nil {
    81  		return err
    82  	}
    83  
    84  	return checkAPIResponse(bts, nil)
    85  }