Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions pkg/api/cloud/db/add.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package db

import (
"context"
"net/url"

"github.com/sitehostnz/gosh/pkg/utils"
)

// Add creates a new cloud database.
func (s *Client) Add(ctx context.Context, request AddRequest) (response AddResponse, err error) {
uri := "cloud/db/add.json"
keys := []string{
"server_name",
"mysql_host",
"database",
"container",
}

values := url.Values{}
values.Add("server_name", request.ServerName)
values.Add("mysql_host", request.MySQLHost)
values.Add("database", request.Database)
values.Add("container", request.Container)

req, err := s.client.NewRequest("POST", uri, utils.Encode(values, keys))
if err != nil {
return response, err
}

if err := s.client.Do(ctx, req, &response); err != nil {
return response, err
}

return response, nil
}
34 changes: 34 additions & 0 deletions pkg/api/cloud/db/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package db

import (
"context"
"net/url"

"github.com/sitehostnz/gosh/pkg/utils"
)

// Delete deletes a cloud database.
func (s *Client) Delete(ctx context.Context, request DeleteRequest) (response DeleteResponse, err error) {
uri := "cloud/db/delete.json"
keys := []string{
"server_name",
"mysql_host",
"database",
}

values := url.Values{}
values.Add("server_name", request.ServerName)
values.Add("mysql_host", request.MySQLHost)
values.Add("database", request.Database)

req, err := s.client.NewRequest("POST", uri, utils.Encode(values, keys))
if err != nil {
return response, err
}

if err := s.client.Do(ctx, req, &response); err != nil {
return response, err
}

return response, nil
}
2 changes: 2 additions & 0 deletions pkg/api/cloud/db/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Package db provides access to the `/cloud/db` API endpoint.
package db
39 changes: 39 additions & 0 deletions pkg/api/cloud/db/get.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package db

import (
"context"

"github.com/sitehostnz/gosh/pkg/utils"
)

// Get fetches a cloud db.
func (s *Client) Get(ctx context.Context, request GetRequest) (response GetResponse, err error) {
uri := "cloud/db/get.json"
keys := []string{
"apikey",
"client_id",
"server_name",
"mysql_host",
"database",
}

req, err := s.client.NewRequest("GET", uri, "")
if err != nil {
return response, err
}

v := req.URL.Query()
v.Add("api_key", s.client.APIKey)
v.Add("client_id", s.client.ClientID)
v.Add("server_name", request.ServerName)
v.Add("mysql_host", request.MySQLHost)
v.Add("database", request.Database)

req.URL.RawQuery = utils.Encode(v, keys)

if err := s.client.Do(ctx, req, &response); err != nil {
return response, err
}

return response, nil
}
28 changes: 28 additions & 0 deletions pkg/api/cloud/db/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package db

import (
"context"

"github.com/sitehostnz/gosh/pkg/utils"
)

// List returns a list of cloud databases, specific to the customer.
func (s *Client) List(ctx context.Context, opt ListOptions) (response ListResponse, err error) {
uri := "cloud/db/list_all.json"

path, err := utils.AddOptions(uri, opt)
if err != nil {
return response, err
}

req, err := s.client.NewRequest("GET", path, "")
if err != nil {
return response, err
}

if err := s.client.Do(ctx, req, &response); err != nil {
return response, err
}

return response, nil
}
19 changes: 19 additions & 0 deletions pkg/api/cloud/db/models.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package db

import (
"github.com/sitehostnz/gosh/pkg/api"
)

type (
// Client is a Service to work with API Cloud/DB.
Client struct {
client *api.Client
}
)

// New is an initialisation function.
func New(c *api.Client) *Client {
return &Client{
client: c,
}
}
45 changes: 45 additions & 0 deletions pkg/api/cloud/db/request.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package db

type (
// AddRequest adds/creates a new database on the given cloud server.
AddRequest struct {
ServerName string `url:"server_name"`
MySQLHost string `url:"mysql_host"`
Database string `url:"database"`
Container string `url:"container"`
}

// DeleteRequest a request to delete the database.
DeleteRequest struct {
ServerName string `url:"server_name"`
MySQLHost string `url:"mysql_host"`
Database string `url:"database"`
}

// UpdateRequest is a request to the update endpoint, it only changes the backup container.
UpdateRequest struct {
ServerName string `url:"server_name"`
MySQLHost string `url:"mysql_host"`
Database string `url:"database"`
Container string `url:"params[container]'"`
}

// ListOptions are options for filtering/listing databases.
ListOptions struct {
ServerName string `url:"filters[server_name],omitempty"`
MySQLHost string `url:"filters[mysql_host],omitempty"`
Database string `url:"filters[db_name],omitempty"`

SortBy string `url:"filters[sort_by],omitempty"`
SortDir string `url:"filters[sort_dir],omitempty"`
PageSize int `url:"filters[page_size],omitempty"`
PageNumber int `url:"filters[page_number],omitempty"`
}

// GetRequest is for getting a single database.
GetRequest struct {
ServerName string `json:"server_name"`
MySQLHost string `json:"mysql_host"`
Database string `json:"database"`
}
)
41 changes: 41 additions & 0 deletions pkg/api/cloud/db/response.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package db

import "github.com/sitehostnz/gosh/pkg/models"

type (
// AddResponse is the return for adding a cloud database.
AddResponse struct {
Return struct {
JobID string `json:"job_id"`
} `json:"return"`
models.APIResponse
}

// UpdateResponse is the response from updating a database.
UpdateResponse struct {
models.APIResponse
}

// DeleteResponse is the return from deleting.
DeleteResponse struct {
Return struct {
JobID string `json:"job_id"`
} `json:"return"`
models.APIResponse
}

// GetResponse is the return value from a get request.
GetResponse struct {
Database models.Database `json:"return"`
models.APIResponse
}

// ListResponse is the returned response from the List endpoint.
ListResponse struct {
Return struct {
Databases []models.Database `json:"data"`
models.Pagination
} `json:"return"`
models.APIResponse
}
)
36 changes: 36 additions & 0 deletions pkg/api/cloud/db/update.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package db

import (
"context"
"net/url"

"github.com/sitehostnz/gosh/pkg/utils"
)

// Update updates the database's backup location.
func (s *Client) Update(ctx context.Context, request UpdateRequest) (response UpdateResponse, err error) {
uri := "cloud/db/update.json"
keys := []string{
"server_name",
"mysql_host",
"database",
"params[container]",
}

values := url.Values{}
values.Add("server_name", request.ServerName)
values.Add("mysql_host", request.MySQLHost)
values.Add("database", request.Database)
values.Add("params[container]", request.Container)

req, err := s.client.NewRequest("POST", uri, utils.Encode(values, keys))
if err != nil {
return response, err
}

if err := s.client.Do(ctx, req, &response); err != nil {
return response, err
}

return response, nil
}
41 changes: 41 additions & 0 deletions pkg/api/cloud/db/user/add.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package user

import (
"context"
"net/url"

"github.com/sitehostnz/gosh/pkg/utils"
)

// Add creates a new for cloud database user.
func (s *Client) Add(ctx context.Context, request AddRequest) (response AddResponse, err error) {
uri := "cloud/db/user/add.json"
keys := []string{
"server_name",
"mysql_host",
"username",
"password",
"database",
"grants[]",
}

values := url.Values{}
values.Add("server_name", request.ServerName)
values.Add("mysql_host", request.MySQLHost)
values.Add("username", request.Username)
values.Add("password", request.Password)
values.Add("database", request.Database)

// database=testdb2, grants[0]=select, grants[1]=insert, grants[2]=update, grants[3]=delete, grants[4]=create, grants[5]=drop, grants[6]=alter, grants[7]=index, grants[8]=create view, grants[9]=show view, grants[10]=lock tables, grants[11]=create temporary tables

req, err := s.client.NewRequest("POST", uri, utils.Encode(values, keys))
if err != nil {
return response, err
}

if err := s.client.Do(ctx, req, &response); err != nil {
return response, err
}

return response, nil
}
34 changes: 34 additions & 0 deletions pkg/api/cloud/db/user/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package user

import (
"context"
"net/url"

"github.com/sitehostnz/gosh/pkg/utils"
)

// Delete deletes a cloud user database.
func (s *Client) Delete(ctx context.Context, request DeleteRequest) (response DeleteResponse, err error) {
uri := "cloud/db/user/delete.json"
keys := []string{
"server_name",
"mysql_host",
"username",
}

values := url.Values{}
values.Add("server_name", request.ServerName)
values.Add("mysql_host", request.MySQLHost)
values.Add("username", request.Username)

req, err := s.client.NewRequest("POST", uri, utils.Encode(values, keys))
if err != nil {
return response, err
}

if err := s.client.Do(ctx, req, &response); err != nil {
return response, err
}

return response, nil
}
2 changes: 2 additions & 0 deletions pkg/api/cloud/db/user/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Package user provides access to the `/cloud/db/user` API endpoint.
package user
Loading