hazelcast/hazelcast-cloud-sdk-go

View on GitHub
enterprise_cluster.go

Summary

Maintainability
D
1 day
Test Coverage
F
44%
package hazelcastcloud

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

//This EnterpriseClusterService is used to make operations related with enterprise clusters
type EnterpriseClusterService interface {
    Get(ctx context.Context, input *models.GetEnterpriseClusterInput) (*models.Cluster, *Response, error)
    Create(ctx context.Context, input *models.CreateEnterpriseClusterInput) (*models.Cluster, *Response, error)
    List(ctx context.Context) (*[]models.Cluster, *Response, error)
    Delete(ctx context.Context, input *models.ClusterDeleteInput) (*models.ClusterId, *Response, error)
    ListUploadedArtifacts(ctx context.Context,
        request *models.ListUploadedArtifactsInput) (*[]models.UploadedArtifact, *Response, error)
    UploadArtifact(ctx context.Context,
        request *models.UploadArtifactInput) (*models.UploadedArtifact, *Response, error)
    DeleteArtifact(ctx context.Context,
        request *models.DeleteArtifactInput) (*models.UploadedArtifact, *Response, error)
    DownloadArtifact(ctx context.Context,
        request *models.DownloadArtifactInput) (*models.UploadedArtifactLink, *Response, error)
}

type enterpriseClusterServiceOp struct {
    client *Client
}

func NewEnterpriseClusterService(client *Client) EnterpriseClusterService {
    return &enterpriseClusterServiceOp{client: client}
}

//This function returns detailed configuration of the cluster
func (svc enterpriseClusterServiceOp) Get(ctx context.Context,
    input *models.GetEnterpriseClusterInput) (*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, resp, err
    }

    return &cluster, resp, err
}

//This function creates an Enterprise Cluster with a configuration provided in the input
func (svc enterpriseClusterServiceOp) Create(ctx context.Context,
    input *models.CreateEnterpriseClusterInput) (*models.Cluster, *Response, error) {
    var cluster models.Cluster
    var graphqlRequest = models.GraphqlRequest{
        Name:      "createEnterpriseCluster",
        Operation: models.Mutation,
        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, resp, err
    }

    return &cluster, resp, err
}

//This function lists all non-deleted Enterprise Clusters
func (svc enterpriseClusterServiceOp) 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.Enterprise,
        },
        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, resp, err
    }

    return &clusterList, resp, err
}

//This function deletes an Enterprise Cluster
func (svc enterpriseClusterServiceOp) 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, resp, err
    }

    return &clusterId, resp, err
}

func (svc enterpriseClusterServiceOp) 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 enterpriseClusterServiceOp) 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 enterpriseClusterServiceOp) 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 enterpriseClusterServiceOp) 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
}