hazelcast/hazelcast-cloud-sdk-go

View on GitHub
serverless_cluster.go

Summary

Maintainability
D
1 day
Test Coverage
D
67%
package hazelcastcloud

import (
    "context"
    "github.com/hazelcast/hazelcast-cloud-sdk-go/models"
)

// ServerlessClusterService is used to interact with serverless clusters.
type ServerlessClusterService struct {
    client *Client
}

// NewServerlessClusterService returns a new instance of the service.
func NewServerlessClusterService(client *Client) ServerlessClusterService {
    return ServerlessClusterService{client}
}

// Create creates a serverless cluster according to configuration provided in the request.
func (svc ServerlessClusterService) Create(ctx context.Context,
    input *models.CreateServerlessClusterInput) (*models.Cluster, *Response, error) {
    var cluster models.Cluster
    var graphqlRequest = models.GraphqlRequest{
        Operation: models.Mutation,
        Name:      "createServerlessCluster",
        Input:     *input,
        Args:      nil,
        Response:  cluster,
    }
    req, err := svc.client.NewRequest(&graphqlRequest)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &cluster)
    if err != nil {
        return nil, nil, err
    }

    return &cluster, resp, nil
}

// List provides the ability to get a list of serverless clusters.
func (svc ServerlessClusterService) List(ctx context.Context) (*[]models.Cluster, *Response, error) {
    var clusterList []models.Cluster
    graphqlRequest := models.GraphqlRequest{
        Name:      "clusters",
        Operation: models.Query,
        Input:     nil,
        Args: models.ClusterListInput{
            ProductType: models.Starter,
        },
        Response: clusterList,
    }
    req, err := svc.client.NewRequest(&graphqlRequest)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &clusterList)
    if err != nil {
        return nil, nil, err
    }

    return &clusterList, resp, err
}

// Get retrieves a serverless cluster by its ID.
func (svc ServerlessClusterService) Get(ctx context.Context,
    input *models.GetServerlessClusterInput) (*models.Cluster, *Response, error) {
    var cluster models.Cluster
    var graphqlRequest = models.GraphqlRequest{
        Name:      "cluster",
        Operation: models.Query,
        Input:     nil,
        Args:      *input,
        Response:  cluster,
    }
    req, err := svc.client.NewRequest(&graphqlRequest)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &cluster)
    if err != nil {
        return nil, nil, err
    }

    return &cluster, resp, err
}

// Delete deletes a serverless cluster by its ID.
func (svc ServerlessClusterService) Delete(ctx context.Context,
    input *models.ClusterDeleteInput) (*models.ClusterId, *Response, error) {
    var clusterId models.ClusterId
    graphqlRequest := models.GraphqlRequest{
        Name:      "deleteCluster",
        Operation: models.Mutation,
        Input:     nil,
        Args:      *input,
        Response:  clusterId,
    }
    req, err := svc.client.NewRequest(&graphqlRequest)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &clusterId)
    if err != nil {
        return nil, nil, err
    }

    return &clusterId, resp, err
}

// Stop provides the ability to stop a serverless cluster by its ID.
func (svc ServerlessClusterService) Stop(ctx context.Context,
    input *models.ClusterStopInput) (*models.ClusterId, *Response, error) {
    var clusterId models.ClusterId
    graphqlRequest := models.GraphqlRequest{
        Name:      "stopCluster",
        Operation: models.Mutation,
        Input:     nil,
        Args:      *input,
        Response:  clusterId,
    }
    req, err := svc.client.NewRequest(&graphqlRequest)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &clusterId)
    if err != nil {
        return nil, nil, err
    }

    return &clusterId, resp, err
}

// Resume provides the ability to resume a serverless cluster by its ID.
func (svc ServerlessClusterService) Resume(ctx context.Context,
    input *models.ClusterResumeInput) (*models.ClusterId, *Response, error) {
    var clusterId models.ClusterId
    graphqlRequest := models.GraphqlRequest{
        Name:      "resumeCluster",
        Operation: models.Mutation,
        Input:     nil,
        Args:      *input,
        Response:  clusterId,
    }
    req, err := svc.client.NewRequest(&graphqlRequest)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &clusterId)
    if err != nil {
        return nil, nil, err
    }

    return &clusterId, resp, err
}

func (svc ServerlessClusterService) ListUploadedArtifacts(ctx context.Context,
    request *models.ListUploadedArtifactsInput) (*[]models.UploadedArtifact, *Response, error) {
    var artifact []models.UploadedArtifact
    graphqlRequest := models.GraphqlRequest{
        Name:      "customClasses",
        Operation: models.Query,
        Input:     nil,
        Args:      *request,
        Response:  artifact,
    }
    req, err := svc.client.NewRequest(&graphqlRequest)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &artifact)
    if err != nil {
        return nil, resp, err
    }

    return &artifact, nil, nil
}

func (svc ServerlessClusterService) UploadArtifact(ctx context.Context,
    request *models.UploadArtifactInput) (*models.UploadedArtifact, *Response, error) {
    var artifact models.UploadedArtifact
    graphqlQuery := models.GraphqlRequest{
        Name:      "uploadCustomClassArtifact",
        Operation: models.Mutation,
        Input:     nil,
        Args: models.UploadArtifactArgs{
            ClusterId: request.ClusterId,
        },
        Response: artifact,
        UploadFile: models.UploadFile{
            FileName: request.FileName,
            Content:  request.Content,
        },
    }
    req, err := svc.client.NewUploadFileRequest(&graphqlQuery)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &artifact)
    if err != nil {
        return nil, resp, err
    }

    return &artifact, nil, nil
}

func (svc ServerlessClusterService) DeleteArtifact(ctx context.Context,
    request *models.DeleteArtifactInput) (*models.UploadedArtifact, *Response, error) {
    var artifact models.UploadedArtifact
    graphqlQuery := models.GraphqlRequest{
        Name:      "deleteCustomClassArtifact",
        Operation: models.Mutation,
        Input:     nil,
        Args:      *request,
        Response:  artifact,
    }
    req, err := svc.client.NewRequest(&graphqlQuery)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &artifact)
    if err != nil {
        return nil, resp, err
    }

    return &artifact, nil, nil
}

func (svc ServerlessClusterService) DownloadArtifact(ctx context.Context,
    request *models.DownloadArtifactInput) (*models.UploadedArtifactLink, *Response, error) {
    var artifact models.UploadedArtifactLink
    graphqlQuery := models.GraphqlRequest{
        Name:      "downloadCustomClassesArtifact",
        Operation: models.Query,
        Args:      *request,
        Response:  artifact,
    }
    req, err := svc.client.NewRequest(&graphqlQuery)
    if err != nil {
        return nil, nil, err
    }

    resp, err := svc.client.Do(ctx, req, &artifact)
    if err != nil {
        return nil, resp, err
    }

    return &artifact, nil, nil
}