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

     1  package scenarioassignment
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/kyma-incubator/compass/components/director/pkg/resource"
     7  
     8  	"github.com/pkg/errors"
     9  
    10  	"github.com/kyma-incubator/compass/components/director/internal/model"
    11  	"github.com/kyma-incubator/compass/components/director/internal/repo"
    12  )
    13  
    14  const tableName string = `public.automatic_scenario_assignments`
    15  
    16  var columns = []string{scenarioColumn, tenantColumn, targetTenantColumn}
    17  
    18  var (
    19  	scenarioColumn     = "scenario"
    20  	tenantColumn       = "tenant_id"
    21  	targetTenantColumn = "target_tenant_id"
    22  )
    23  
    24  // NewRepository missing godoc
    25  func NewRepository(conv EntityConverter) *repository {
    26  	return &repository{
    27  		creator:         repo.NewCreatorGlobal(resource.AutomaticScenarioAssigment, tableName, columns),
    28  		lister:          repo.NewListerWithEmbeddedTenant(tableName, tenantColumn, columns),
    29  		singleGetter:    repo.NewSingleGetterWithEmbeddedTenant(tableName, tenantColumn, columns),
    30  		pageableQuerier: repo.NewPageableQuerierWithEmbeddedTenant(tableName, tenantColumn, columns),
    31  		deleter:         repo.NewDeleterWithEmbeddedTenant(tableName, tenantColumn),
    32  		conv:            conv,
    33  	}
    34  }
    35  
    36  type repository struct {
    37  	creator         repo.CreatorGlobal
    38  	singleGetter    repo.SingleGetter
    39  	lister          repo.Lister
    40  	pageableQuerier repo.PageableQuerier
    41  	deleter         repo.Deleter
    42  	conv            EntityConverter
    43  }
    44  
    45  // EntityConverter missing godoc
    46  //go:generate mockery --name=EntityConverter --output=automock --outpkg=automock --case=underscore --disable-version-string
    47  type EntityConverter interface {
    48  	ToEntity(assignment model.AutomaticScenarioAssignment) Entity
    49  	FromEntity(assignment Entity) model.AutomaticScenarioAssignment
    50  }
    51  
    52  // Create missing godoc
    53  func (r *repository) Create(ctx context.Context, model model.AutomaticScenarioAssignment) error {
    54  	entity := r.conv.ToEntity(model)
    55  	return r.creator.Create(ctx, entity)
    56  }
    57  
    58  func (r *repository) ListAll(ctx context.Context, tenantID string) ([]*model.AutomaticScenarioAssignment, error) {
    59  	var out EntityCollection
    60  
    61  	if err := r.lister.List(ctx, resource.AutomaticScenarioAssigment, tenantID, &out); err != nil {
    62  		return nil, errors.Wrap(err, "while getting automatic scenario assignments from db")
    63  	}
    64  
    65  	items := make([]*model.AutomaticScenarioAssignment, 0, len(out))
    66  
    67  	for _, v := range out {
    68  		item := r.conv.FromEntity(v)
    69  		items = append(items, &item)
    70  	}
    71  
    72  	return items, nil
    73  }
    74  
    75  func (r *repository) ListForTargetTenant(ctx context.Context, tenantID string, targetTenantID string) ([]*model.AutomaticScenarioAssignment, error) {
    76  	var out EntityCollection
    77  
    78  	conditions := repo.Conditions{
    79  		repo.NewEqualCondition(targetTenantColumn, targetTenantID),
    80  	}
    81  
    82  	if err := r.lister.List(ctx, resource.AutomaticScenarioAssigment, tenantID, &out, conditions...); err != nil {
    83  		return nil, errors.Wrap(err, "while getting automatic scenario assignments from db")
    84  	}
    85  
    86  	items := make([]*model.AutomaticScenarioAssignment, 0, len(out))
    87  
    88  	for _, v := range out {
    89  		item := r.conv.FromEntity(v)
    90  		items = append(items, &item)
    91  	}
    92  
    93  	return items, nil
    94  }
    95  
    96  // GetForScenarioName missing godoc
    97  func (r *repository) GetForScenarioName(ctx context.Context, tenantID, scenarioName string) (model.AutomaticScenarioAssignment, error) {
    98  	var ent Entity
    99  
   100  	conditions := repo.Conditions{
   101  		repo.NewEqualCondition(scenarioColumn, scenarioName),
   102  	}
   103  
   104  	if err := r.singleGetter.Get(ctx, resource.AutomaticScenarioAssigment, tenantID, conditions, repo.NoOrderBy, &ent); err != nil {
   105  		return model.AutomaticScenarioAssignment{}, err
   106  	}
   107  
   108  	assignmentModel := r.conv.FromEntity(ent)
   109  
   110  	return assignmentModel, nil
   111  }
   112  
   113  // List missing godoc
   114  func (r *repository) List(ctx context.Context, tenantID string, pageSize int, cursor string) (*model.AutomaticScenarioAssignmentPage, error) {
   115  	var collection EntityCollection
   116  	page, totalCount, err := r.pageableQuerier.List(ctx, resource.AutomaticScenarioAssigment, tenantID, pageSize, cursor, scenarioColumn, &collection)
   117  	if err != nil {
   118  		return nil, err
   119  	}
   120  
   121  	items := make([]*model.AutomaticScenarioAssignment, 0, len(collection))
   122  
   123  	for _, ent := range collection {
   124  		m := r.conv.FromEntity(ent)
   125  		items = append(items, &m)
   126  	}
   127  
   128  	return &model.AutomaticScenarioAssignmentPage{
   129  		Data:       items,
   130  		TotalCount: totalCount,
   131  		PageInfo:   page,
   132  	}, nil
   133  }
   134  
   135  func (r *repository) DeleteForTargetTenant(ctx context.Context, tenantID string, targetTenantID string) error {
   136  	conditions := repo.Conditions{
   137  		repo.NewEqualCondition(targetTenantColumn, targetTenantID),
   138  	}
   139  
   140  	return r.deleter.DeleteMany(ctx, resource.AutomaticScenarioAssigment, tenantID, conditions)
   141  }
   142  
   143  // DeleteForScenarioName missing godoc
   144  func (r *repository) DeleteForScenarioName(ctx context.Context, tenantID string, scenarioName string) error {
   145  	conditions := repo.Conditions{
   146  		repo.NewEqualCondition(scenarioColumn, scenarioName),
   147  	}
   148  
   149  	return r.deleter.DeleteOne(ctx, resource.AutomaticScenarioAssigment, tenantID, conditions)
   150  }