github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/integrationsystem/repository.go (about) 1 package integrationsystem 2 3 import ( 4 "context" 5 6 "github.com/kyma-incubator/compass/components/director/pkg/resource" 7 8 "github.com/kyma-incubator/compass/components/director/internal/model" 9 "github.com/kyma-incubator/compass/components/director/internal/repo" 10 ) 11 12 const tableName string = `public.integration_systems` 13 14 var tableColumns = []string{"id", "name", "description"} 15 16 // Converter missing godoc 17 //go:generate mockery --name=Converter --output=automock --outpkg=automock --case=underscore --disable-version-string 18 type Converter interface { 19 ToEntity(in *model.IntegrationSystem) *Entity 20 FromEntity(in *Entity) *model.IntegrationSystem 21 } 22 23 type pgRepository struct { 24 creator repo.CreatorGlobal 25 existQuerierGlobal repo.ExistQuerierGlobal 26 singleGetterGlobal repo.SingleGetterGlobal 27 pageableQuerierGlobal repo.PageableQuerierGlobal 28 updaterGlobal repo.UpdaterGlobal 29 deleterGlobal repo.DeleterGlobal 30 31 conv Converter 32 } 33 34 // NewRepository missing godoc 35 func NewRepository(conv Converter) *pgRepository { 36 return &pgRepository{ 37 creator: repo.NewCreatorGlobal(resource.IntegrationSystem, tableName, tableColumns), 38 existQuerierGlobal: repo.NewExistQuerierGlobal(resource.IntegrationSystem, tableName), 39 singleGetterGlobal: repo.NewSingleGetterGlobal(resource.IntegrationSystem, tableName, tableColumns), 40 pageableQuerierGlobal: repo.NewPageableQuerierGlobal(resource.IntegrationSystem, tableName, tableColumns), 41 updaterGlobal: repo.NewUpdaterGlobal(resource.IntegrationSystem, tableName, []string{"name", "description"}, []string{"id"}), 42 deleterGlobal: repo.NewDeleterGlobal(resource.IntegrationSystem, tableName), 43 conv: conv, 44 } 45 } 46 47 // Create missing godoc 48 func (r *pgRepository) Create(ctx context.Context, item model.IntegrationSystem) error { 49 return r.creator.Create(ctx, r.conv.ToEntity(&item)) 50 } 51 52 // Get missing godoc 53 func (r *pgRepository) Get(ctx context.Context, id string) (*model.IntegrationSystem, error) { 54 var entity Entity 55 if err := r.singleGetterGlobal.GetGlobal(ctx, repo.Conditions{repo.NewEqualCondition("id", id)}, repo.NoOrderBy, &entity); err != nil { 56 return nil, err 57 } 58 return r.conv.FromEntity(&entity), nil 59 } 60 61 // Exists missing godoc 62 func (r *pgRepository) Exists(ctx context.Context, id string) (bool, error) { 63 return r.existQuerierGlobal.ExistsGlobal(ctx, repo.Conditions{repo.NewEqualCondition("id", id)}) 64 } 65 66 // List missing godoc 67 func (r *pgRepository) List(ctx context.Context, pageSize int, cursor string) (model.IntegrationSystemPage, error) { 68 var entityCollection Collection 69 page, totalCount, err := r.pageableQuerierGlobal.ListGlobal(ctx, pageSize, cursor, "id", &entityCollection) 70 if err != nil { 71 return model.IntegrationSystemPage{}, err 72 } 73 74 items := make([]*model.IntegrationSystem, 0, len(entityCollection)) 75 76 for _, entity := range entityCollection { 77 isModel := r.conv.FromEntity(&entity) 78 items = append(items, isModel) 79 } 80 return model.IntegrationSystemPage{ 81 Data: items, 82 TotalCount: totalCount, 83 PageInfo: page, 84 }, nil 85 } 86 87 // Update missing godoc 88 func (r *pgRepository) Update(ctx context.Context, model model.IntegrationSystem) error { 89 return r.updaterGlobal.UpdateSingleGlobal(ctx, r.conv.ToEntity(&model)) 90 } 91 92 // Delete missing godoc 93 func (r *pgRepository) Delete(ctx context.Context, id string) error { 94 return r.deleterGlobal.DeleteOneGlobal(ctx, repo.Conditions{repo.NewEqualCondition("id", id)}) 95 }