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 }