github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/eventing/resolver.go (about) 1 package eventing 2 3 import ( 4 "context" 5 6 "github.com/google/uuid" 7 "github.com/kyma-incubator/compass/components/director/internal/model" 8 "github.com/kyma-incubator/compass/components/director/pkg/graphql" 9 "github.com/kyma-incubator/compass/components/director/pkg/persistence" 10 "github.com/pkg/errors" 11 ) 12 13 // EventingService missing godoc 14 //go:generate mockery --name=EventingService --output=automock --outpkg=automock --case=underscore --disable-version-string 15 type EventingService interface { 16 SetForApplication(ctx context.Context, runtimeID uuid.UUID, app model.Application) (*model.ApplicationEventingConfiguration, error) 17 UnsetForApplication(ctx context.Context, app model.Application) (*model.ApplicationEventingConfiguration, error) 18 } 19 20 // ApplicationService missing godoc 21 //go:generate mockery --name=ApplicationService --output=automock --outpkg=automock --case=underscore --disable-version-string 22 type ApplicationService interface { 23 Get(ctx context.Context, id string) (*model.Application, error) 24 } 25 26 // Resolver missing godoc 27 type Resolver struct { 28 transact persistence.Transactioner 29 eventingSvc EventingService 30 appSvc ApplicationService 31 } 32 33 // NewResolver missing godoc 34 func NewResolver(transact persistence.Transactioner, eventingSvc EventingService, appSvc ApplicationService) *Resolver { 35 return &Resolver{ 36 transact: transact, 37 eventingSvc: eventingSvc, 38 appSvc: appSvc, 39 } 40 } 41 42 // SetEventingForApplication missing godoc 43 func (r *Resolver) SetEventingForApplication(ctx context.Context, appID string, runtime string) (*graphql.ApplicationEventingConfiguration, error) { 44 appUUID, err := uuid.Parse(appID) 45 if err != nil { 46 return nil, errors.Wrap(err, "while parsing application ID as UUID") 47 } 48 49 runtimeID, err := uuid.Parse(runtime) 50 if err != nil { 51 return nil, errors.Wrap(err, "while parsing runtime ID as UUID") 52 } 53 54 tx, err := r.transact.Begin() 55 if err != nil { 56 return nil, errors.Wrap(err, "while opening the transaction") 57 } 58 defer r.transact.RollbackUnlessCommitted(ctx, tx) 59 60 ctx = persistence.SaveToContext(ctx, tx) 61 62 app, err := r.appSvc.Get(ctx, appUUID.String()) 63 if err != nil { 64 return nil, errors.Wrap(err, "while getting application") 65 } 66 67 eventingCfg, err := r.eventingSvc.SetForApplication(ctx, runtimeID, *app) 68 if err != nil { 69 return nil, errors.Wrap(err, "while setting eventing cofiguration for application") 70 } 71 72 if err = tx.Commit(); err != nil { 73 return nil, errors.Wrap(err, "while committing the transaction") 74 } 75 76 return ApplicationEventingConfigurationToGraphQL(eventingCfg), nil 77 } 78 79 // UnsetEventingForApplication missing godoc 80 func (r *Resolver) UnsetEventingForApplication(ctx context.Context, appID string) (*graphql.ApplicationEventingConfiguration, error) { 81 appUUID, err := uuid.Parse(appID) 82 if err != nil { 83 return nil, errors.Wrap(err, "while parsing application ID as UUID") 84 } 85 86 tx, err := r.transact.Begin() 87 if err != nil { 88 return nil, errors.Wrap(err, "while opening the transaction") 89 } 90 defer r.transact.RollbackUnlessCommitted(ctx, tx) 91 92 ctx = persistence.SaveToContext(ctx, tx) 93 94 app, err := r.appSvc.Get(ctx, appUUID.String()) 95 if err != nil { 96 return nil, errors.Wrap(err, "while getting application") 97 } 98 99 eventingCfg, err := r.eventingSvc.UnsetForApplication(ctx, *app) 100 if err != nil { 101 return nil, errors.Wrap(err, "while unsetting eventing cofiguration for application") 102 } 103 104 if err = tx.Commit(); err != nil { 105 return nil, errors.Wrap(err, "while committing the transaction") 106 } 107 108 return ApplicationEventingConfigurationToGraphQL(eventingCfg), nil 109 }