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 }