Files
paralus/pkg/service/kubectl_cluster_setting.go
2022-04-22 12:13:23 +05:30

87 lines
2.9 KiB
Go

package service
import (
"context"
"database/sql"
"time"
"github.com/RafayLabs/rcloud-base/internal/constants"
"github.com/RafayLabs/rcloud-base/internal/dao"
"github.com/RafayLabs/rcloud-base/internal/models"
"github.com/RafayLabs/rcloud-base/proto/types/sentry"
"github.com/google/uuid"
"github.com/uptrace/bun"
"google.golang.org/protobuf/types/known/timestamppb"
)
// KubectlClusterSettingsService is the interface for kubectl cluster setting operations
type KubectlClusterSettingsService interface {
Get(ctx context.Context, orgID string, clusterID string) (*sentry.KubectlClusterSettings, error)
Patch(ctx context.Context, kc *sentry.KubectlClusterSettings) error
}
// kubectlClusterSettingsService implements KubectlClusterSettingsService
type kubectlClusterSettingsService struct {
db *bun.DB
}
// NewKubectlClusterSettingsService return new kubectl cluster setting service
func NewkubectlClusterSettingsService(db *bun.DB) KubectlClusterSettingsService {
return &kubectlClusterSettingsService{db}
}
func (kcs *kubectlClusterSettingsService) Get(ctx context.Context, orgID string, clusterID string) (*sentry.KubectlClusterSettings, error) {
kc, err := dao.GetkubectlClusterSettings(ctx, kcs.db, uuid.MustParse(orgID), clusterID)
if err == sql.ErrNoRows {
return nil, constants.ErrNotFound
} else if err != nil {
return nil, err
}
return prepareKubectlSettingResponse(kc), nil
}
func (kcs *kubectlClusterSettingsService) Patch(ctx context.Context, kc *sentry.KubectlClusterSettings) error {
return kcs.db.RunInTx(ctx, &sql.TxOptions{}, func(ctx context.Context, tx bun.Tx) error {
_, err := dao.GetkubectlClusterSettings(ctx, tx, uuid.MustParse(kc.OrganizationID), kc.Name)
if err != nil {
if err == sql.ErrNoRows {
kcsdb := convertToKubeCtlSettingModel(kc)
kcsdb.CreatedAt = time.Now()
return dao.CreatekubectlClusterSettings(ctx, tx, kcsdb)
}
return err
}
kcsdb := convertToKubeCtlSettingModel(kc)
kcsdb.ModifiedAt = time.Now()
return dao.UpdatekubectlClusterSettings(ctx, tx, kcsdb)
})
}
func convertToKubeCtlSettingModel(kcs *sentry.KubectlClusterSettings) *models.KubectlClusterSetting {
kcsm := &models.KubectlClusterSetting{
Name: kcs.Name,
OrganizationId: uuid.MustParse(kcs.OrganizationID),
DisableWebKubectl: kcs.DisableWebKubectl,
DisableCliKubectl: kcs.DisableCLIKubectl,
}
if kcs.PartnerID != "" {
kcsm.PartnerId, _ = uuid.Parse(kcs.PartnerID)
}
return kcsm
}
func prepareKubectlSettingResponse(kcs *models.KubectlClusterSetting) *sentry.KubectlClusterSettings {
kc := &sentry.KubectlClusterSettings{
Name: kcs.Name,
OrganizationID: kcs.OrganizationId.String(),
DisableWebKubectl: kcs.DisableWebKubectl,
DisableCLIKubectl: kcs.DisableCliKubectl,
CreatedAt: timestamppb.New(kcs.CreatedAt),
ModifiedAt: timestamppb.New(kcs.ModifiedAt),
}
if kcs.PartnerId != uuid.Nil {
kc.PartnerID = kcs.PartnerId.String()
}
return kc
}