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 }