github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/tenantfetchersvc/subscriber.go (about)

     1  package tenantfetchersvc
     2  
     3  import (
     4  	"context"
     5  )
     6  
     7  // TenantProvisioner is used to create all related to the incoming request tenants, and build their hierarchy;
     8  //
     9  //go:generate mockery --name=TenantProvisioner --output=automock --outpkg=automock --case=underscore --disable-version-string
    10  type TenantProvisioner interface {
    11  	ProvisionTenants(context.Context, *TenantSubscriptionRequest) error
    12  }
    13  
    14  type subscriptionFunc func(ctx context.Context, tenantSubscriptionRequest *TenantSubscriptionRequest) error
    15  
    16  type subscriber struct {
    17  	gqlClient   DirectorGraphQLClient
    18  	provisioner TenantProvisioner
    19  }
    20  
    21  // NewSubscriber creates new subscriber
    22  func NewSubscriber(directorClient DirectorGraphQLClient, provisioner TenantProvisioner) *subscriber {
    23  	return &subscriber{
    24  		gqlClient:   directorClient,
    25  		provisioner: provisioner,
    26  	}
    27  }
    28  
    29  // Subscribe subscribes tenant to appTemplate/runtime. If the tenant does not exist it will be created
    30  func (s *subscriber) Subscribe(ctx context.Context, tenantSubscriptionRequest *TenantSubscriptionRequest) error {
    31  	if err := s.provisioner.ProvisionTenants(ctx, tenantSubscriptionRequest); err != nil {
    32  		return err
    33  	}
    34  
    35  	return s.applySubscriptionChange(ctx, tenantSubscriptionRequest.SubscriptionProviderID, tenantSubscriptionRequest.SubaccountTenantID, tenantSubscriptionRequest.ProviderSubaccountID, tenantSubscriptionRequest.ConsumerTenantID, tenantSubscriptionRequest.Region, tenantSubscriptionRequest.SubscriptionProviderAppName, tenantSubscriptionRequest.SubscriptionPayload, true)
    36  }
    37  
    38  // Unsubscribe unsubscribes tenant from appTemplate/runtime.
    39  func (s *subscriber) Unsubscribe(ctx context.Context, tenantSubscriptionRequest *TenantSubscriptionRequest) error {
    40  	return s.applySubscriptionChange(ctx, tenantSubscriptionRequest.SubscriptionProviderID, tenantSubscriptionRequest.SubaccountTenantID, tenantSubscriptionRequest.ProviderSubaccountID, tenantSubscriptionRequest.ConsumerTenantID, tenantSubscriptionRequest.Region, tenantSubscriptionRequest.SubscriptionProviderAppName, tenantSubscriptionRequest.SubscriptionPayload, false)
    41  }
    42  
    43  func (s *subscriber) applySubscriptionChange(ctx context.Context, subscriptionProviderID, subaccountTenantID, providerSubaccountID, consumerTenantID, region, subscriptionProviderAppName, subscriptionPayload string, subscribe bool) error {
    44  	var err error
    45  
    46  	if subscribe {
    47  		err = s.gqlClient.SubscribeTenant(ctx, subscriptionProviderID, subaccountTenantID, providerSubaccountID, consumerTenantID, region, subscriptionProviderAppName, subscriptionPayload)
    48  	} else {
    49  		err = s.gqlClient.UnsubscribeTenant(ctx, subscriptionProviderID, subaccountTenantID, providerSubaccountID, consumerTenantID, region)
    50  	}
    51  	return err
    52  }