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

     1  package scenarioassignment
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/kyma-incubator/compass/components/director/internal/domain/tenant"
     7  
     8  	"github.com/kyma-incubator/compass/components/director/internal/model"
     9  	"github.com/kyma-incubator/compass/components/director/pkg/apperrors"
    10  	"github.com/pkg/errors"
    11  )
    12  
    13  // Repository missing godoc
    14  //go:generate mockery --name=Repository --output=automock --outpkg=automock --case=underscore --disable-version-string
    15  type Repository interface {
    16  	ListForTargetTenant(ctx context.Context, tenantID string, targetTenantID string) ([]*model.AutomaticScenarioAssignment, error)
    17  	GetForScenarioName(ctx context.Context, tenantID, scenarioName string) (model.AutomaticScenarioAssignment, error)
    18  	List(ctx context.Context, tenant string, pageSize int, cursor string) (*model.AutomaticScenarioAssignmentPage, error)
    19  }
    20  
    21  // ScenariosDefService missing godoc
    22  //go:generate mockery --name=ScenariosDefService --output=automock --outpkg=automock --case=underscore --disable-version-string
    23  type ScenariosDefService interface {
    24  	GetAvailableScenarios(ctx context.Context, tenantID string) ([]string, error)
    25  }
    26  
    27  // NewService missing godoc
    28  func NewService(repo Repository, scenarioDefSvc ScenariosDefService) *service {
    29  	return &service{
    30  		repo:            repo,
    31  		scenariosDefSvc: scenarioDefSvc,
    32  	}
    33  }
    34  
    35  type service struct {
    36  	repo            Repository
    37  	scenariosDefSvc ScenariosDefService
    38  }
    39  
    40  // ListForTargetTenant missing godoc
    41  func (s *service) ListForTargetTenant(ctx context.Context, targetTenantInternalID string) ([]*model.AutomaticScenarioAssignment, error) {
    42  	tenantID, err := tenant.LoadFromContext(ctx)
    43  	if err != nil {
    44  		return nil, err
    45  	}
    46  
    47  	assignments, err := s.repo.ListForTargetTenant(ctx, tenantID, targetTenantInternalID)
    48  	if err != nil {
    49  		return nil, errors.Wrap(err, "while getting the assignments")
    50  	}
    51  	return assignments, nil
    52  }
    53  
    54  // GetForScenarioName missing godoc
    55  func (s *service) GetForScenarioName(ctx context.Context, scenarioName string) (model.AutomaticScenarioAssignment, error) {
    56  	tenantID, err := tenant.LoadFromContext(ctx)
    57  	if err != nil {
    58  		return model.AutomaticScenarioAssignment{}, err
    59  	}
    60  
    61  	sa, err := s.repo.GetForScenarioName(ctx, tenantID, scenarioName)
    62  	if err != nil {
    63  		return model.AutomaticScenarioAssignment{}, errors.Wrap(err, "while getting Assignment")
    64  	}
    65  	return sa, nil
    66  }
    67  
    68  // List missing godoc
    69  func (s *service) List(ctx context.Context, pageSize int, cursor string) (*model.AutomaticScenarioAssignmentPage, error) {
    70  	tnt, err := tenant.LoadFromContext(ctx)
    71  	if err != nil {
    72  		return nil, err
    73  	}
    74  
    75  	if pageSize < 1 || pageSize > 200 {
    76  		return nil, apperrors.NewInvalidDataError("page size must be between 1 and 200")
    77  	}
    78  
    79  	return s.repo.List(ctx, tnt, pageSize, cursor)
    80  }