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

     1  package scenarioassignment
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/kyma-incubator/compass/components/director/pkg/apperrors"
     7  
     8  	"github.com/kyma-incubator/compass/components/director/internal/model"
     9  	"github.com/kyma-incubator/compass/components/director/pkg/graphql"
    10  	"github.com/kyma-incubator/compass/components/director/pkg/persistence"
    11  
    12  	"github.com/pkg/errors"
    13  )
    14  
    15  //go:generate mockery --exported --name=gqlConverter --output=automock --outpkg=automock --case=underscore --disable-version-string
    16  type gqlConverter interface {
    17  	ToGraphQL(in model.AutomaticScenarioAssignment, targetTenantExternalID string) graphql.AutomaticScenarioAssignment
    18  }
    19  
    20  //go:generate mockery --exported --name=asaService --output=automock --outpkg=automock --case=underscore --disable-version-string
    21  type asaService interface {
    22  	List(ctx context.Context, pageSize int, cursor string) (*model.AutomaticScenarioAssignmentPage, error)
    23  	ListForTargetTenant(ctx context.Context, targetTenantInternalID string) ([]*model.AutomaticScenarioAssignment, error)
    24  	GetForScenarioName(ctx context.Context, scenarioName string) (model.AutomaticScenarioAssignment, error)
    25  }
    26  
    27  //go:generate mockery --exported --name=tenantService --output=automock --outpkg=automock --case=underscore --disable-version-string
    28  type tenantService interface {
    29  	GetExternalTenant(ctx context.Context, id string) (string, error)
    30  	GetInternalTenant(ctx context.Context, externalTenant string) (string, error)
    31  }
    32  
    33  // NewResolver missing godoc
    34  func NewResolver(transact persistence.Transactioner, svc asaService, converter gqlConverter, tenantService tenantService) *Resolver {
    35  	return &Resolver{
    36  		transact:      transact,
    37  		svc:           svc,
    38  		converter:     converter,
    39  		tenantService: tenantService,
    40  	}
    41  }
    42  
    43  // Resolver missing godoc
    44  type Resolver struct {
    45  	transact      persistence.Transactioner
    46  	converter     gqlConverter
    47  	svc           asaService
    48  	tenantService tenantService
    49  }
    50  
    51  // GetAutomaticScenarioAssignmentForScenarioName missing godoc
    52  func (r *Resolver) GetAutomaticScenarioAssignmentForScenarioName(ctx context.Context, scenarioName string) (*graphql.AutomaticScenarioAssignment, error) {
    53  	tx, err := r.transact.Begin()
    54  	if err != nil {
    55  		return nil, errors.Wrap(err, "while beginning transaction")
    56  	}
    57  	defer r.transact.RollbackUnlessCommitted(ctx, tx)
    58  
    59  	ctx = persistence.SaveToContext(ctx, tx)
    60  
    61  	out, err := r.svc.GetForScenarioName(ctx, scenarioName)
    62  	if err != nil {
    63  		return nil, errors.Wrap(err, "while getting Assignment")
    64  	}
    65  
    66  	targetTenant, err := r.tenantService.GetExternalTenant(ctx, out.TargetTenantID)
    67  	if err != nil {
    68  		return nil, errors.Wrap(err, "while converting tenant")
    69  	}
    70  
    71  	err = tx.Commit()
    72  	if err != nil {
    73  		return nil, errors.Wrap(err, "while committing transaction")
    74  	}
    75  
    76  	assignment := r.converter.ToGraphQL(out, targetTenant)
    77  
    78  	return &assignment, nil
    79  }
    80  
    81  // AutomaticScenarioAssignmentsForSelector missing godoc
    82  func (r *Resolver) AutomaticScenarioAssignmentsForSelector(ctx context.Context, in graphql.LabelSelectorInput) ([]*graphql.AutomaticScenarioAssignment, error) {
    83  	tx, err := r.transact.Begin()
    84  	if err != nil {
    85  		return nil, errors.Wrap(err, "while beginning transaction")
    86  	}
    87  	defer r.transact.RollbackUnlessCommitted(ctx, tx)
    88  
    89  	ctx = persistence.SaveToContext(ctx, tx)
    90  
    91  	targetTenant, err := r.tenantService.GetInternalTenant(ctx, in.Value)
    92  	if err != nil {
    93  		return nil, errors.Wrap(err, "while converting tenant")
    94  	}
    95  
    96  	assignments, err := r.svc.ListForTargetTenant(ctx, targetTenant)
    97  	if err != nil {
    98  		return nil, errors.Wrap(err, "while getting the assignments")
    99  	}
   100  
   101  	if err = tx.Commit(); err != nil {
   102  		return nil, errors.Wrap(err, "while committing transaction")
   103  	}
   104  
   105  	gqlAssignments := make([]*graphql.AutomaticScenarioAssignment, 0, len(assignments))
   106  
   107  	for _, v := range assignments {
   108  		assignment := r.converter.ToGraphQL(*v, in.Value)
   109  		gqlAssignments = append(gqlAssignments, &assignment)
   110  	}
   111  
   112  	return gqlAssignments, nil
   113  }
   114  
   115  // AutomaticScenarioAssignments missing godoc
   116  func (r *Resolver) AutomaticScenarioAssignments(ctx context.Context, first *int, after *graphql.PageCursor) (*graphql.AutomaticScenarioAssignmentPage, error) {
   117  	var cursor string
   118  	if after != nil {
   119  		cursor = string(*after)
   120  	}
   121  	if first == nil {
   122  		return nil, apperrors.NewInvalidDataError("missing required parameter 'first'")
   123  	}
   124  
   125  	tx, err := r.transact.Begin()
   126  	if err != nil {
   127  		return nil, errors.Wrap(err, "while beginning transaction")
   128  	}
   129  	defer r.transact.RollbackUnlessCommitted(ctx, tx)
   130  
   131  	ctx = persistence.SaveToContext(ctx, tx)
   132  
   133  	page, err := r.svc.List(ctx, *first, cursor)
   134  	if err != nil {
   135  		return nil, errors.Wrap(err, "while listing the assignments")
   136  	}
   137  
   138  	gqlAssignments := make([]*graphql.AutomaticScenarioAssignment, 0, len(page.Data))
   139  
   140  	for _, v := range page.Data {
   141  		targetTenant, err := r.tenantService.GetExternalTenant(ctx, v.TargetTenantID)
   142  		if err != nil {
   143  			return nil, errors.Wrap(err, "while converting tenant")
   144  		}
   145  
   146  		assignment := r.converter.ToGraphQL(*v, targetTenant)
   147  		gqlAssignments = append(gqlAssignments, &assignment)
   148  	}
   149  
   150  	err = tx.Commit()
   151  	if err != nil {
   152  		return nil, errors.Wrap(err, "while committing transaction")
   153  	}
   154  
   155  	return &graphql.AutomaticScenarioAssignmentPage{
   156  		Data:       gqlAssignments,
   157  		TotalCount: page.TotalCount,
   158  		PageInfo: &graphql.PageInfo{
   159  			StartCursor: graphql.PageCursor(page.PageInfo.StartCursor),
   160  			EndCursor:   graphql.PageCursor(page.PageInfo.EndCursor),
   161  			HasNextPage: page.PageInfo.HasNextPage,
   162  		},
   163  	}, nil
   164  }