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 }