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 }