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 }