Skip to content
Merged
Show file tree
Hide file tree
Changes from 24 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
24 changes: 24 additions & 0 deletions api/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,28 @@ type Client interface {
// Cel
// ParseExpression parse the expression string.
ParseExpression(ctx context.Context, expression string) (*v1alpha1.Expr, error)

// VCS Provider
// ListVCSProvider will returns all vcs providers.
ListVCSProvider(ctx context.Context) (*v1pb.ListVCSProvidersResponse, error)
// GetVCSProvider gets the vcs by id.
GetVCSProvider(ctx context.Context, name string) (*v1pb.VCSProvider, error)
// CreateVCSProvider creates the vcs provider.
CreateVCSProvider(ctx context.Context, vcsID string, vcs *v1pb.VCSProvider) (*v1pb.VCSProvider, error)
// UpdateVCSProvider updates the vcs provider.
UpdateVCSProvider(ctx context.Context, patch *v1pb.VCSProvider, updateMasks []string) (*v1pb.VCSConnector, error)
// DeleteVCSProvider deletes the vcs provider.
DeleteVCSProvider(ctx context.Context, name string) error

// VCS Connector
// ListVCSConnector will returns all vcs connector in a project.
ListVCSConnector(ctx context.Context, projectName string) (*v1pb.ListVCSConnectorsResponse, error)
// GetVCSConnector gets the vcs connector by id.
GetVCSConnector(ctx context.Context, name string) (*v1pb.VCSConnector, error)
// CreateVCSConnector creates the vcs connector in a project.
CreateVCSConnector(ctx context.Context, projectName, connectorID string, connector *v1pb.VCSConnector) (*v1pb.VCSConnector, error)
// UpdateVCSConnector updates the vcs connector.
UpdateVCSConnector(ctx context.Context, patch *v1pb.VCSConnector, updateMasks []string) (*v1pb.VCSConnector, error)
// DeleteVCSConnector deletes the vcs provider.
DeleteVCSConnector(ctx context.Context, name string) error
}
68 changes: 68 additions & 0 deletions client/common.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,76 @@
package client

import (
"context"
"fmt"
"net/http"
"strings"

"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/reflect/protoreflect"
)

// ProtojsonUnmarshaler is the unmarshal for protocol.
var ProtojsonUnmarshaler = protojson.UnmarshalOptions{DiscardUnknown: true}

// deleteResource deletes the resource by name.
func (c *client) deleteResource(ctx context.Context, name string) error {
req, err := http.NewRequestWithContext(ctx, "DELETE", fmt.Sprintf("%s/%s/%s", c.url, c.version, name), nil)
if err != nil {
return err
}

if _, err := c.doRequest(req); err != nil {
return err
}
return nil
}

// undeleteResource undeletes the resource by name.
func (c *client) undeleteResource(ctx context.Context, name string) ([]byte, error) {
req, err := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("%s/%s/%s:undelete", c.url, c.version, name), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
if err != nil {
return nil, err
}

return body, nil
}

// deleteResource deletes the resource by name.
func (c *client) updateResource(ctx context.Context, name string, patch protoreflect.ProtoMessage, updateMasks []string, allowMissing bool) ([]byte, error) {
payload, err := protojson.Marshal(patch)
if err != nil {
return nil, err
}

req, err := http.NewRequestWithContext(ctx, "PATCH", fmt.Sprintf("%s/%s/%s?update_mask=%s&allow_missing=%v", c.url, c.version, name, strings.Join(updateMasks, ","), allowMissing), strings.NewReader(string(payload)))
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
if err != nil {
return nil, err
}

return body, nil
}

// getResource gets the resource by name.
func (c *client) getResource(ctx context.Context, name string) ([]byte, error) {
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/%s", c.url, c.version, name), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
if err != nil {
return nil, err
}
return body, nil
}
23 changes: 3 additions & 20 deletions client/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,13 @@ import (
"fmt"
"net/http"
"net/url"
"strings"

v1pb "github.com/bytebase/bytebase/proto/generated-go/v1"
"google.golang.org/protobuf/encoding/protojson"
)

// GetDatabase gets the database by environment resource id, instance resource id and the database name.
// GetDatabase gets the database by the database name.
func (c *client) GetDatabase(ctx context.Context, databaseName string) (*v1pb.Database, error) {
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/%s", c.url, c.version, databaseName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.getResource(ctx, databaseName)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -58,17 +51,7 @@ func (c *client) ListDatabase(ctx context.Context, instanceID, filter string) (*

// UpdateDatabase patches the database.
func (c *client) UpdateDatabase(ctx context.Context, patch *v1pb.Database, updateMasks []string) (*v1pb.Database, error) {
payload, err := protojson.Marshal(patch)
if err != nil {
return nil, err
}

req, err := http.NewRequestWithContext(ctx, "PATCH", fmt.Sprintf("%s/%s/%s?update_mask=%s", c.url, c.version, patch.Name, strings.Join(updateMasks, ",")), strings.NewReader(string(payload)))
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.updateResource(ctx, patch.Name, patch, updateMasks, false /* allow missing = false*/)
if err != nil {
return nil, err
}
Expand Down
38 changes: 5 additions & 33 deletions client/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,7 @@ func (c *client) CreateEnvironment(ctx context.Context, environmentID string, cr

// GetEnvironment gets the environment by id.
func (c *client) GetEnvironment(ctx context.Context, environmentName string) (*v1pb.Environment, error) {
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/%s", c.url, c.version, environmentName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.getResource(ctx, environmentName)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -76,18 +71,8 @@ func (c *client) ListEnvironment(ctx context.Context, showDeleted bool) (*v1pb.L
}

// UpdateEnvironment updates the environment.
func (c *client) UpdateEnvironment(ctx context.Context, patch *v1pb.Environment, updateMask []string) (*v1pb.Environment, error) {
payload, err := protojson.Marshal(patch)
if err != nil {
return nil, err
}

req, err := http.NewRequestWithContext(ctx, "PATCH", fmt.Sprintf("%s/%s/%s?update_mask=%s", c.url, c.version, patch.Name, strings.Join(updateMask, ",")), strings.NewReader(string(payload)))
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
func (c *client) UpdateEnvironment(ctx context.Context, patch *v1pb.Environment, updateMasks []string) (*v1pb.Environment, error) {
body, err := c.updateResource(ctx, patch.Name, patch, updateMasks, false /* allow missing = false*/)
if err != nil {
return nil, err
}
Expand All @@ -102,25 +87,12 @@ func (c *client) UpdateEnvironment(ctx context.Context, patch *v1pb.Environment,

// DeleteEnvironment deletes the environment.
func (c *client) DeleteEnvironment(ctx context.Context, environmentName string) error {
req, err := http.NewRequestWithContext(ctx, "DELETE", fmt.Sprintf("%s/%s/%s", c.url, c.version, environmentName), nil)
if err != nil {
return err
}

if _, err := c.doRequest(req); err != nil {
return err
}
return nil
return c.deleteResource(ctx, environmentName)
}

// UndeleteEnvironment undeletes the environment.
func (c *client) UndeleteEnvironment(ctx context.Context, environmentName string) (*v1pb.Environment, error) {
req, err := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("%s/%s/%s:undelete", c.url, c.version, environmentName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.undeleteResource(ctx, environmentName)
if err != nil {
return nil, err
}
Expand Down
37 changes: 4 additions & 33 deletions client/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,7 @@ func (c *client) ListInstance(ctx context.Context, showDeleted bool) (*v1pb.List

// GetInstance gets the instance by id.
func (c *client) GetInstance(ctx context.Context, instanceName string) (*v1pb.Instance, error) {
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/%s", c.url, c.version, instanceName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.getResource(ctx, instanceName)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -78,18 +73,7 @@ func (c *client) CreateInstance(ctx context.Context, instanceID string, instance

// UpdateInstance updates the instance.
func (c *client) UpdateInstance(ctx context.Context, patch *v1pb.Instance, updateMasks []string) (*v1pb.Instance, error) {
payload, err := protojson.Marshal(patch)
if err != nil {
return nil, err
}

req, err := http.NewRequestWithContext(ctx, "PATCH", fmt.Sprintf("%s/%s/%s?update_mask=%s", c.url, c.version, patch.Name, strings.Join(updateMasks, ",")), strings.NewReader(string(payload)))

if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.updateResource(ctx, patch.Name, patch, updateMasks, false /* allow missing = false*/)
if err != nil {
return nil, err
}
Expand All @@ -104,25 +88,12 @@ func (c *client) UpdateInstance(ctx context.Context, patch *v1pb.Instance, updat

// DeleteInstance deletes the instance.
func (c *client) DeleteInstance(ctx context.Context, instanceName string) error {
req, err := http.NewRequestWithContext(ctx, "DELETE", fmt.Sprintf("%s/%s/%s", c.url, c.version, instanceName), nil)
if err != nil {
return err
}

if _, err := c.doRequest(req); err != nil {
return err
}
return nil
return c.deleteResource(ctx, instanceName)
}

// UndeleteInstance undeletes the instance.
func (c *client) UndeleteInstance(ctx context.Context, instanceName string) (*v1pb.Instance, error) {
req, err := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("%s/%s/%s:undelete", c.url, c.version, instanceName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.undeleteResource(ctx, instanceName)
if err != nil {
return nil, err
}
Expand Down
31 changes: 3 additions & 28 deletions client/policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ import (
"context"
"fmt"
"net/http"
"strings"

v1pb "github.com/bytebase/bytebase/proto/generated-go/v1"
"google.golang.org/protobuf/encoding/protojson"
)

// ListPolicies lists policies in a specific resource.
Expand Down Expand Up @@ -38,12 +36,7 @@ func (c *client) ListPolicies(ctx context.Context, parent string) (*v1pb.ListPol

// GetPolicy gets a policy in a specific resource.
func (c *client) GetPolicy(ctx context.Context, policyName string) (*v1pb.Policy, error) {
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/%s", c.url, c.version, policyName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.getResource(ctx, policyName)
if err != nil {
return nil, err
}
Expand All @@ -58,17 +51,7 @@ func (c *client) GetPolicy(ctx context.Context, policyName string) (*v1pb.Policy

// UpsertPolicy creates or updates the policy.
func (c *client) UpsertPolicy(ctx context.Context, policy *v1pb.Policy, updateMasks []string) (*v1pb.Policy, error) {
payload, err := protojson.Marshal(policy)
if err != nil {
return nil, err
}

req, err := http.NewRequestWithContext(ctx, "PATCH", fmt.Sprintf("%s/%s/%s?allow_missing=true&update_mask=%s", c.url, c.version, policy.Name, strings.Join(updateMasks, ",")), strings.NewReader(string(payload)))
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.updateResource(ctx, policy.Name, policy, updateMasks, true /* allow missing = true*/)
if err != nil {
return nil, err
}
Expand All @@ -83,13 +66,5 @@ func (c *client) UpsertPolicy(ctx context.Context, policy *v1pb.Policy, updateMa

// DeletePolicy deletes the policy.
func (c *client) DeletePolicy(ctx context.Context, policyName string) error {
req, err := http.NewRequestWithContext(ctx, "DELETE", fmt.Sprintf("%s/%s/%s", c.url, c.version, policyName), nil)
if err != nil {
return err
}

if _, err := c.doRequest(req); err != nil {
return err
}
return nil
return c.deleteResource(ctx, policyName)
}
39 changes: 5 additions & 34 deletions client/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,7 @@ import (

// GetProject gets the project by resource id.
func (c *client) GetProject(ctx context.Context, projectName string) (*v1pb.Project, error) {
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/%s", c.url, c.version, projectName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.getResource(ctx, projectName)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -77,19 +72,8 @@ func (c *client) CreateProject(ctx context.Context, projectID string, project *v
}

// UpdateProject updates the project.
func (c *client) UpdateProject(ctx context.Context, patch *v1pb.Project, updateMask []string) (*v1pb.Project, error) {
payload, err := protojson.Marshal(patch)
if err != nil {
return nil, err
}

req, err := http.NewRequestWithContext(ctx, "PATCH", fmt.Sprintf("%s/%s/%s?update_mask=%s", c.url, c.version, patch.Name, strings.Join(updateMask, ",")), strings.NewReader(string(payload)))

if err != nil {
return nil, err
}

body, err := c.doRequest(req)
func (c *client) UpdateProject(ctx context.Context, patch *v1pb.Project, updateMasks []string) (*v1pb.Project, error) {
body, err := c.updateResource(ctx, patch.Name, patch, updateMasks, false /* allow missing = false*/)
if err != nil {
return nil, err
}
Expand All @@ -104,25 +88,12 @@ func (c *client) UpdateProject(ctx context.Context, patch *v1pb.Project, updateM

// DeleteProject deletes the project.
func (c *client) DeleteProject(ctx context.Context, projectName string) error {
req, err := http.NewRequestWithContext(ctx, "DELETE", fmt.Sprintf("%s/%s/%s", c.url, c.version, projectName), nil)
if err != nil {
return err
}

if _, err := c.doRequest(req); err != nil {
return err
}
return nil
return c.deleteResource(ctx, projectName)
}

// UndeleteProject undeletes the project.
func (c *client) UndeleteProject(ctx context.Context, projectName string) (*v1pb.Project, error) {
req, err := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("%s/%s/%s:undelete", c.url, c.version, projectName), nil)
if err != nil {
return nil, err
}

body, err := c.doRequest(req)
body, err := c.undeleteResource(ctx, projectName)
if err != nil {
return nil, err
}
Expand Down
Loading
Loading