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  }