diff --git a/pkg/bsql/provisioning.go b/pkg/bsql/provisioning.go index c9ff40f3..31ecbbf6 100644 --- a/pkg/bsql/provisioning.go +++ b/pkg/bsql/provisioning.go @@ -13,6 +13,8 @@ import ( "go.uber.org/zap" ) +var ErrUnableFindResourceProvisioning = errors.New("unable to find resource for account provisioning") + // getProvisioningConfig fetches the provisioning config for the given entitlement if it exists. func (s *SQLSyncer) getProvisioningConfig(ctx context.Context, entitlementID string) (*EntitlementProvisioning, bool) { l := ctxzap.Extract(ctx) @@ -180,7 +182,7 @@ func (s *SQLSyncer) validateAccount(ctx context.Context, accountProvisioning *Ac } if ret == nil { - return nil, fmt.Errorf("unable to find resource for account provisioning") + return nil, ErrUnableFindResourceProvisioning } return ret, nil diff --git a/pkg/bsql/user_syncer.go b/pkg/bsql/user_syncer.go index 16149dd0..9d65e263 100644 --- a/pkg/bsql/user_syncer.go +++ b/pkg/bsql/user_syncer.go @@ -136,6 +136,21 @@ func (s *userSyncer) CreateAccount( return nil, nil, nil, err } + previousAccountResource, err := s.validateAccount(ctx, provisioningConfig, queryInputs) + if err != nil { + if !errors.Is(err, ErrUnableFindResourceProvisioning) { + return nil, nil, nil, fmt.Errorf("failed to check existing account: %w", err) + } + } + + if previousAccountResource != nil { + logger.Info("account resource is already created", zap.String("resource_id", previousAccountResource.GetId().GetResource())) + + return &v2.CreateAccountResponse_SuccessResult{ + Resource: previousAccountResource, + }, nil, nil, nil + } + // Execute account creation queries useTransaction := !provisioningConfig.Create.NoTransaction if err := s.RunProvisioningQueries(ctx, provisioningConfig.Create.Queries, queryInputs, useTransaction); err != nil { @@ -149,7 +164,8 @@ func (s *userSyncer) CreateAccount( } response := &v2.CreateAccountResponse_SuccessResult{ - Resource: accountResource, + IsCreateAccountResult: true, + Resource: accountResource, } return response, plaintextDataList, nil, nil