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

     1  package formationtemplateconstraintreferences
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/kyma-incubator/compass/components/director/internal/model"
     7  	"github.com/kyma-incubator/compass/components/director/internal/repo"
     8  	"github.com/kyma-incubator/compass/components/director/pkg/apperrors"
     9  	"github.com/kyma-incubator/compass/components/director/pkg/log"
    10  	"github.com/kyma-incubator/compass/components/director/pkg/resource"
    11  	"github.com/pkg/errors"
    12  )
    13  
    14  const (
    15  	tableName                 string = `public.formation_template_constraint_references`
    16  	formationTemplateColumn   string = "formation_template_id"
    17  	formationConstraintColumn string = "formation_constraint_id"
    18  )
    19  
    20  var (
    21  	tableColumns = []string{formationConstraintColumn, formationTemplateColumn}
    22  )
    23  
    24  type repository struct {
    25  	lister  repo.ListerGlobal
    26  	creator repo.CreatorGlobal
    27  	deleter repo.DeleterGlobal
    28  	conv    constraintReferenceConverter
    29  }
    30  
    31  // NewRepository creates a new FormationTemplateConstraintReference repository
    32  func NewRepository(conv constraintReferenceConverter) *repository {
    33  	return &repository{
    34  		lister:  repo.NewListerGlobal(resource.FormationTemplateConstraintReference, tableName, tableColumns),
    35  		creator: repo.NewCreatorGlobal(resource.FormationTemplateConstraintReference, tableName, tableColumns),
    36  		deleter: repo.NewDeleterGlobal(resource.FormationTemplateConstraintReference, tableName),
    37  		conv:    conv,
    38  	}
    39  }
    40  
    41  // ListByFormationTemplateID lists formationTemplateConstraintReferences for the provided formationTemplate ID
    42  func (r *repository) ListByFormationTemplateID(ctx context.Context, formationTemplateID string) ([]*model.FormationTemplateConstraintReference, error) {
    43  	var entityCollection EntityCollection
    44  
    45  	if err := r.lister.ListGlobal(ctx, &entityCollection, repo.NewEqualCondition(formationTemplateColumn, formationTemplateID)); err != nil {
    46  		return nil, errors.Wrap(err, "while listing formationTemplate-constraint references by formationTemplate ID")
    47  	}
    48  	return r.multipleFromEntities(entityCollection)
    49  }
    50  
    51  // ListByFormationTemplateIDs lists formationTemplateConstraintReferences for the provided formationTemplate IDs
    52  func (r *repository) ListByFormationTemplateIDs(ctx context.Context, formationTemplateIDs []string) ([]*model.FormationTemplateConstraintReference, error) {
    53  	var entityCollection EntityCollection
    54  
    55  	if err := r.lister.ListGlobal(ctx, &entityCollection, repo.NewInConditionForStringValues(formationTemplateColumn, formationTemplateIDs)); err != nil {
    56  		return nil, errors.Wrap(err, "while listing formationTemplate-constraint references by formationTemplate ID")
    57  	}
    58  
    59  	return r.multipleFromEntities(entityCollection)
    60  }
    61  
    62  // Create stores new formationTemplateConstraintReference in the database
    63  func (r *repository) Create(ctx context.Context, item *model.FormationTemplateConstraintReference) error {
    64  	if item == nil {
    65  		return apperrors.NewInternalError("model can not be empty")
    66  	}
    67  
    68  	log.C(ctx).Debugf("Converting FormationTemplateConstraintReference with formationTemplate ID: %q and formationConstraint ID: %q to entity", item.FormationTemplateID, item.ConstraintID)
    69  	entity := r.conv.ToEntity(item)
    70  
    71  	log.C(ctx).Debugf("Persisting FormationTemplateConstraintReference with formationTemplate ID: %q and formationConstraint ID: %q to the DB", item.FormationTemplateID, item.ConstraintID)
    72  	return r.creator.Create(ctx, entity)
    73  }
    74  
    75  // Delete deletes a formationTemplateConstraintReference for formationTemplate ID and constraint ID
    76  func (r *repository) Delete(ctx context.Context, formationTemplateID, constraintID string) error {
    77  	log.C(ctx).Debugf("Deleting FormationTemplateConstraintReference with formationTemplate ID: %q and formationConstraint ID: %q...", formationTemplateID, constraintID)
    78  	return r.deleter.DeleteOneGlobal(ctx, repo.Conditions{repo.NewEqualCondition(formationTemplateColumn, formationTemplateID), repo.NewEqualCondition(formationConstraintColumn, constraintID)})
    79  }
    80  
    81  func (r *repository) multipleFromEntities(entities EntityCollection) ([]*model.FormationTemplateConstraintReference, error) {
    82  	items := make([]*model.FormationTemplateConstraintReference, 0, len(entities))
    83  	for _, ent := range entities {
    84  		m := r.conv.FromEntity(ent)
    85  		items = append(items, m)
    86  	}
    87  	return items, nil
    88  }