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  }