From 4cc96b4b307fee599f8fac4c95f78c06e88cd186 Mon Sep 17 00:00:00 2001 From: andres-portainer <91705312+andres-portainer@users.noreply.github.com> Date: Thu, 22 Jun 2023 18:28:07 -0300 Subject: [PATCH] feat(dataservices): unify access methods and abstract away redundant code [EE-5628] (#9115) --- api/.golangci.yaml | 2 + api/apikey/service.go | 12 +- .../apikeyrepository/apikeyrepository.go | 51 +++----- api/dataservices/base.go | 66 ++++++++++ api/dataservices/base_tx.go | 49 ++++++++ .../customtemplate/customtemplate.go | 51 ++------ api/dataservices/edgegroup/edgegroup.go | 60 +++------ api/dataservices/edgegroup/tx.go | 48 +------ api/dataservices/edgejob/edgejob.go | 69 +++------- api/dataservices/edgejob/tx.go | 55 ++------ .../endpointgroup/endpointgroup.go | 56 ++------- api/dataservices/endpointgroup/tx.go | 45 +------ api/dataservices/fdoprofile/fdoprofile.go | 57 ++------- .../helmuserrepository/helmuserrepository.go | 38 ++---- api/dataservices/interface.go | 119 +++--------------- api/dataservices/registry/registry.go | 56 ++------- api/dataservices/registry/tx.go | 45 +------ .../resourcecontrol/resourcecontrol.go | 60 ++------- api/dataservices/resourcecontrol/tx.go | 49 +------- api/dataservices/role/role.go | 50 ++------ api/dataservices/role/tx.go | 40 +----- api/dataservices/snapshot/snapshot.go | 52 ++------ api/dataservices/snapshot/tx.go | 41 +----- api/dataservices/stack/stack.go | 59 ++------- api/dataservices/tag/tag.go | 60 ++------- api/dataservices/tag/tx.go | 45 +------ api/dataservices/team/team.go | 51 ++------ .../teammembership/teammembership.go | 66 +++------- api/dataservices/teammembership/tx.go | 55 ++------ api/dataservices/user/user.go | 54 ++------ api/dataservices/webhook/webhook.go | 53 ++------ api/datastore/datastore_test.go | 10 +- api/datastore/init.go | 5 +- api/datastore/migrate_dbversion33_test.go | 8 +- api/datastore/migrator/migrate_dbversion17.go | 12 +- api/datastore/migrator/migrate_dbversion20.go | 24 ++-- api/datastore/migrator/migrate_dbversion22.go | 12 +- api/datastore/migrator/migrate_dbversion23.go | 4 +- api/datastore/migrator/migrate_dbversion26.go | 4 +- api/datastore/migrator/migrate_dbversion31.go | 14 +-- api/datastore/migrator/migrate_dbversion33.go | 4 +- api/datastore/migrator/migrate_dbversion35.go | 4 +- api/datastore/migrator/migrate_dbversion71.go | 4 +- api/datastore/migrator/migrate_dbversion90.go | 8 +- api/datastore/services.go | 60 ++++----- api/demo/demo.go | 2 +- api/docker/images/registry.go | 4 +- api/exec/kubernetes_deploy.go | 2 +- api/http/handler/auth/authenticate.go | 2 +- .../customtemplates/customtemplate_create.go | 2 +- .../customtemplates/customtemplate_delete.go | 6 +- .../customtemplates/customtemplate_file.go | 2 +- .../customtemplate_git_fetch.go | 4 +- .../customtemplates/customtemplate_inspect.go | 2 +- .../customtemplates/customtemplate_list.go | 6 +- .../customtemplates/customtemplate_update.go | 6 +- .../handler/docker/containers/recreate.go | 4 +- .../edgegroups/associated_endpoints.go | 2 +- .../handler/edgegroups/edgegroup_create.go | 2 +- .../handler/edgegroups/edgegroup_delete.go | 6 +- .../handler/edgegroups/edgegroup_inspect.go | 2 +- api/http/handler/edgegroups/edgegroup_list.go | 4 +- .../handler/edgegroups/edgegroup_update.go | 14 +-- api/http/handler/edgejobs/edgejob_create.go | 2 +- api/http/handler/edgejobs/edgejob_delete.go | 4 +- api/http/handler/edgejobs/edgejob_file.go | 2 +- api/http/handler/edgejobs/edgejob_inspect.go | 2 +- api/http/handler/edgejobs/edgejob_list.go | 2 +- .../edgejobs/edgejob_tasklogs_clear.go | 4 +- .../edgejobs/edgejob_tasklogs_collect.go | 4 +- .../handler/edgejobs/edgejob_tasks_list.go | 2 +- api/http/handler/edgejobs/edgejob_update.go | 6 +- .../endpointedge/endpoint_edgejob_logs.go | 4 +- .../endpointgroups/endpointgroup_create.go | 4 +- .../endpointgroups/endpointgroup_delete.go | 8 +- .../endpointgroup_endpoint_add.go | 2 +- .../endpointgroup_endpoint_delete.go | 2 +- .../endpointgroups/endpointgroup_inspect.go | 2 +- .../endpointgroups/endpointgroup_list.go | 2 +- .../endpointgroups/endpointgroup_update.go | 12 +- api/http/handler/endpointgroups/endpoints.go | 4 +- .../endpoints/endpoint_agent_versions.go | 2 +- api/http/handler/endpoints/endpoint_create.go | 4 +- api/http/handler/endpoints/endpoint_delete.go | 10 +- .../handler/endpoints/endpoint_delete_test.go | 2 +- .../endpoints/endpoint_dockerhub_status.go | 2 +- api/http/handler/endpoints/endpoint_list.go | 2 +- .../endpoints/endpoint_registries_list.go | 4 +- .../endpoints/endpoint_registry_access.go | 4 +- api/http/handler/endpoints/filter.go | 4 +- .../endpoints/update_edge_relations.go | 4 +- .../endpoints/utils_update_edge_groups.go | 6 +- .../utils_update_edge_groups_test.go | 4 +- .../handler/endpoints/utils_update_tags.go | 4 +- .../endpoints/utils_update_tags_test.go | 4 +- api/http/handler/helm/helm_install.go | 2 +- .../handler/hostmanagement/fdo/configure.go | 2 +- api/http/handler/hostmanagement/fdo/fdo.go | 2 +- .../hostmanagement/fdo/profile_duplicate.go | 2 +- .../hostmanagement/fdo/profile_inspect.go | 2 +- .../hostmanagement/fdo/profile_list.go | 2 +- .../hostmanagement/fdo/profile_update.go | 2 +- api/http/handler/hostmanagement/fdo/utils.go | 2 +- api/http/handler/kubernetes/config.go | 2 +- .../handler/registries/registry_configure.go | 4 +- .../handler/registries/registry_create.go | 2 +- .../handler/registries/registry_delete.go | 4 +- .../handler/registries/registry_inspect.go | 2 +- api/http/handler/registries/registry_list.go | 2 +- .../handler/registries/registry_update.go | 6 +- .../resourcecontrol_delete.go | 4 +- .../resourcecontrol_update.go | 4 +- api/http/handler/roles/role_list.go | 2 +- .../handler/stacks/create_compose_stack.go | 4 +- .../handler/stacks/create_kubernetes_stack.go | 6 +- api/http/handler/stacks/handler.go | 8 +- api/http/handler/stacks/stack_associate.go | 8 +- api/http/handler/stacks/stack_delete.go | 6 +- api/http/handler/stacks/stack_file.go | 2 +- api/http/handler/stacks/stack_inspect.go | 2 +- api/http/handler/stacks/stack_list.go | 6 +- api/http/handler/stacks/stack_migrate.go | 6 +- api/http/handler/stacks/stack_start.go | 4 +- api/http/handler/stacks/stack_stop.go | 4 +- api/http/handler/stacks/stack_update.go | 6 +- api/http/handler/stacks/stack_update_git.go | 6 +- .../stacks/stack_update_git_redeploy.go | 6 +- api/http/handler/tags/tag_create.go | 2 +- api/http/handler/tags/tag_delete.go | 14 +-- api/http/handler/tags/tag_delete_test.go | 2 +- api/http/handler/tags/tag_list.go | 2 +- .../teammemberships/teammembership_delete.go | 4 +- .../teammemberships/teammembership_list.go | 2 +- .../teammemberships/teammembership_update.go | 4 +- api/http/handler/teams/team_delete.go | 4 +- api/http/handler/teams/team_inspect.go | 2 +- api/http/handler/teams/team_list.go | 4 +- api/http/handler/teams/team_update.go | 4 +- .../handler/users/user_create_access_token.go | 2 +- api/http/handler/users/user_delete.go | 6 +- .../handler/users/user_get_access_tokens.go | 2 +- api/http/handler/users/user_inspect.go | 2 +- api/http/handler/users/user_list.go | 4 +- .../handler/users/user_remove_access_token.go | 2 +- api/http/handler/users/user_update.go | 4 +- .../handler/users/user_update_password.go | 4 +- api/http/handler/webhooks/webhook_delete.go | 2 +- api/http/handler/webhooks/webhook_execute.go | 2 +- api/http/handler/webhooks/webhook_list.go | 2 +- api/http/handler/webhooks/webhook_update.go | 4 +- .../proxy/factory/azure/access_control.go | 4 +- api/http/proxy/factory/docker/transport.go | 12 +- .../proxy/factory/kubernetes/namespaces.go | 8 +- .../proxy/factory/kubernetes/transport.go | 2 +- api/http/security/bouncer.go | 6 +- api/internal/authorization/authorizations.go | 12 +- .../endpoint_role_with_override.go | 4 +- api/internal/edge/edgegroup.go | 4 +- api/internal/edge/edgejob.go | 2 +- api/internal/edge/edgestack.go | 4 +- api/internal/registryutils/access/access.go | 4 +- api/internal/registryutils/ecr_kube_secret.go | 2 +- api/internal/registryutils/ecr_reg_token.go | 2 +- api/internal/snapshot/snapshot.go | 2 +- api/internal/testhelpers/datastore.go | 27 ++-- api/jwt/jwt.go | 2 +- api/stacks/deployments/deploy.go | 6 +- api/stacks/deployments/deploy_test.go | 6 +- .../deployments/deployment_compose_config.go | 4 +- .../deployments/deployment_swarm_config.go | 4 +- api/stacks/deployments/scheduled.go | 2 +- 171 files changed, 714 insertions(+), 1590 deletions(-) create mode 100644 api/dataservices/base.go create mode 100644 api/dataservices/base_tx.go diff --git a/api/.golangci.yaml b/api/.golangci.yaml index 6b117490b..64a1ef9bf 100644 --- a/api/.golangci.yaml +++ b/api/.golangci.yaml @@ -19,6 +19,8 @@ linters-settings: - github.com/sirupsen/logrus: 'logging is allowed only by github.com/rs/zerolog' ignore-file-rules: - '**/*_test.go' + - '**/base.go' + - '**/base_tx.go' # errorlint is causing a typecheck error for some reason. The go compiler will report these # anyway, so ignore them from the linter diff --git a/api/apikey/service.go b/api/apikey/service.go index 48e7ea5fa..742bc7bc1 100644 --- a/api/apikey/service.go +++ b/api/apikey/service.go @@ -53,7 +53,7 @@ func (a *apiKeyService) GenerateApiKey(user portainer.User, description string) Digest: hashDigest, } - err := a.apiKeyRepository.CreateAPIKey(apiKey) + err := a.apiKeyRepository.Create(apiKey) if err != nil { return "", nil, errors.Wrap(err, "Unable to create API key") } @@ -66,7 +66,7 @@ func (a *apiKeyService) GenerateApiKey(user portainer.User, description string) // GetAPIKey returns an API key by its ID. func (a *apiKeyService) GetAPIKey(apiKeyID portainer.APIKeyID) (*portainer.APIKey, error) { - return a.apiKeyRepository.GetAPIKey(apiKeyID) + return a.apiKeyRepository.Read(apiKeyID) } // GetAPIKeys returns all the API keys associated to a user. @@ -88,7 +88,7 @@ func (a *apiKeyService) GetDigestUserAndKey(digest []byte) (portainer.User, port return portainer.User{}, portainer.APIKey{}, errors.Wrap(err, "Unable to retrieve API key") } - user, err := a.userRepository.User(apiKey.UserID) + user, err := a.userRepository.Read(apiKey.UserID) if err != nil { return portainer.User{}, portainer.APIKey{}, errors.Wrap(err, "Unable to retrieve digest user") } @@ -106,20 +106,20 @@ func (a *apiKeyService) UpdateAPIKey(apiKey *portainer.APIKey) error { return errors.Wrap(err, "Unable to retrieve API key") } a.cache.Set(apiKey.Digest, user, *apiKey) - return a.apiKeyRepository.UpdateAPIKey(apiKey) + return a.apiKeyRepository.Update(apiKey.ID, apiKey) } // DeleteAPIKey deletes an API key and removes the digest/api-key entry from the cache. func (a *apiKeyService) DeleteAPIKey(apiKeyID portainer.APIKeyID) error { // get api-key digest to remove from cache - apiKey, err := a.apiKeyRepository.GetAPIKey(apiKeyID) + apiKey, err := a.apiKeyRepository.Read(apiKeyID) if err != nil { return errors.Wrap(err, fmt.Sprintf("Unable to retrieve API key: %d", apiKeyID)) } // delete the user/api-key from cache a.cache.Delete(apiKey.Digest) - return a.apiKeyRepository.DeleteAPIKey(apiKeyID) + return a.apiKeyRepository.Delete(apiKeyID) } func (a *apiKeyService) InvalidateUserKeyCache(userId portainer.UserID) bool { diff --git a/api/dataservices/apikeyrepository/apikeyrepository.go b/api/dataservices/apikeyrepository/apikeyrepository.go index 00557e3a7..bbe0d3f0b 100644 --- a/api/dataservices/apikeyrepository/apikeyrepository.go +++ b/api/dataservices/apikeyrepository/apikeyrepository.go @@ -6,19 +6,18 @@ import ( "fmt" portainer "github.com/portainer/portainer/api" + "github.com/portainer/portainer/api/dataservices" dserrors "github.com/portainer/portainer/api/dataservices/errors" "github.com/rs/zerolog/log" ) -const ( - // BucketName represents the name of the bucket where this service stores data. - BucketName = "api_key" -) +// BucketName represents the name of the bucket where this service stores data. +const BucketName = "api_key" // Service represents a service for managing api-key data. type Service struct { - connection portainer.Connection + dataservices.BaseDataService[portainer.APIKey, portainer.APIKeyID] } // NewService creates a new instance of a service. @@ -29,7 +28,10 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.APIKey, portainer.APIKeyID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } @@ -37,14 +39,14 @@ func NewService(connection portainer.Connection) (*Service, error) { func (service *Service) GetAPIKeysByUserID(userID portainer.UserID) ([]portainer.APIKey, error) { var result = make([]portainer.APIKey, 0) - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.APIKey{}, func(obj interface{}) (interface{}, error) { record, ok := obj.(*portainer.APIKey) if !ok { log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to APIKey object") - return nil, fmt.Errorf("Failed to convert to APIKey object: %s", obj) + return nil, fmt.Errorf("failed to convert to APIKey object: %s", obj) } if record.UserID == userID { @@ -62,14 +64,14 @@ func (service *Service) GetAPIKeysByUserID(userID portainer.UserID) ([]portainer func (service *Service) GetAPIKeyByDigest(digest []byte) (*portainer.APIKey, error) { var k *portainer.APIKey stop := fmt.Errorf("ok") - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.APIKey{}, func(obj interface{}) (interface{}, error) { key, ok := obj.(*portainer.APIKey) if !ok { log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to APIKey object") - return nil, fmt.Errorf("Failed to convert to APIKey object: %s", obj) + return nil, fmt.Errorf("failed to convert to APIKey object: %s", obj) } if bytes.Equal(key.Digest, digest) { k = key @@ -90,9 +92,9 @@ func (service *Service) GetAPIKeyByDigest(digest []byte) (*portainer.APIKey, err return nil, err } -// CreateAPIKey creates a new APIKey object. -func (service *Service) CreateAPIKey(record *portainer.APIKey) error { - return service.connection.CreateObject( +// Create creates a new APIKey object. +func (service *Service) Create(record *portainer.APIKey) error { + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { record.ID = portainer.APIKeyID(id) @@ -101,26 +103,3 @@ func (service *Service) CreateAPIKey(record *portainer.APIKey) error { }, ) } - -// GetAPIKey retrieves an existing APIKey object by api key ID. -func (service *Service) GetAPIKey(keyID portainer.APIKeyID) (*portainer.APIKey, error) { - var key portainer.APIKey - identifier := service.connection.ConvertToKey(int(keyID)) - - err := service.connection.GetObject(BucketName, identifier, &key) - if err != nil { - return nil, err - } - - return &key, nil -} - -func (service *Service) UpdateAPIKey(key *portainer.APIKey) error { - identifier := service.connection.ConvertToKey(int(key.ID)) - return service.connection.UpdateObject(BucketName, identifier, key) -} - -func (service *Service) DeleteAPIKey(ID portainer.APIKeyID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/base.go b/api/dataservices/base.go new file mode 100644 index 000000000..9b1a42a53 --- /dev/null +++ b/api/dataservices/base.go @@ -0,0 +1,66 @@ +package dataservices + +import ( + portainer "github.com/portainer/portainer/api" + + "golang.org/x/exp/constraints" +) + +type BaseCRUD[T any, I constraints.Integer] interface { + Create(element *T) error + Read(ID I) (*T, error) + ReadAll() ([]T, error) + Update(ID I, element *T) error + Delete(ID I) error +} + +type BaseDataService[T any, I constraints.Integer] struct { + Bucket string + Connection portainer.Connection +} + +func (s *BaseDataService[T, I]) BucketName() string { + return s.Bucket +} + +func (service *BaseDataService[T, I]) Tx(tx portainer.Transaction) BaseDataServiceTx[T, I] { + return BaseDataServiceTx[T, I]{ + Bucket: service.Bucket, + Connection: service.Connection, + Tx: tx, + } +} + +func (service BaseDataService[T, I]) Read(ID I) (*T, error) { + var element *T + + return element, service.Connection.ViewTx(func(tx portainer.Transaction) error { + var err error + element, err = service.Tx(tx).Read(ID) + + return err + }) +} + +func (service BaseDataService[T, I]) ReadAll() ([]T, error) { + var collection = make([]T, 0) + + return collection, service.Connection.ViewTx(func(tx portainer.Transaction) error { + var err error + collection, err = service.Tx(tx).ReadAll() + + return err + }) +} + +func (service BaseDataService[T, I]) Update(ID I, element *T) error { + return service.Connection.UpdateTx(func(tx portainer.Transaction) error { + return service.Tx(tx).Update(ID, element) + }) +} + +func (service BaseDataService[T, I]) Delete(ID I) error { + return service.Connection.UpdateTx(func(tx portainer.Transaction) error { + return service.Tx(tx).Delete(ID) + }) +} diff --git a/api/dataservices/base_tx.go b/api/dataservices/base_tx.go new file mode 100644 index 000000000..bf273233b --- /dev/null +++ b/api/dataservices/base_tx.go @@ -0,0 +1,49 @@ +package dataservices + +import ( + portainer "github.com/portainer/portainer/api" + + "golang.org/x/exp/constraints" +) + +type BaseDataServiceTx[T any, I constraints.Integer] struct { + Bucket string + Connection portainer.Connection + Tx portainer.Transaction +} + +func (service BaseDataServiceTx[T, I]) BucketName() string { + return service.Bucket +} + +func (service BaseDataServiceTx[T, I]) Read(ID I) (*T, error) { + var element T + identifier := service.Connection.ConvertToKey(int(ID)) + + err := service.Tx.GetObject(service.Bucket, identifier, &element) + if err != nil { + return nil, err + } + + return &element, nil +} + +func (service BaseDataServiceTx[T, I]) ReadAll() ([]T, error) { + var collection = make([]T, 0) + + return collection, service.Tx.GetAllWithJsoniter( + service.Bucket, + new(T), + AppendFn(&collection), + ) +} + +func (service BaseDataServiceTx[T, I]) Update(ID I, element *T) error { + identifier := service.Connection.ConvertToKey(int(ID)) + return service.Tx.UpdateObject(service.Bucket, identifier, element) +} + +func (service BaseDataServiceTx[T, I]) Delete(ID I) error { + identifier := service.Connection.ConvertToKey(int(ID)) + return service.Tx.DeleteObject(service.Bucket, identifier) +} diff --git a/api/dataservices/customtemplate/customtemplate.go b/api/dataservices/customtemplate/customtemplate.go index 3065b636a..9cc54493e 100644 --- a/api/dataservices/customtemplate/customtemplate.go +++ b/api/dataservices/customtemplate/customtemplate.go @@ -10,11 +10,7 @@ const BucketName = "customtemplates" // Service represents a service for managing custom template data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.CustomTemplate, portainer.CustomTemplateID] } // NewService creates a new instance of a service. @@ -25,53 +21,20 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.CustomTemplate, portainer.CustomTemplateID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } -// CustomTemplates return an array containing all the custom templates. -func (service *Service) CustomTemplates() ([]portainer.CustomTemplate, error) { - var customTemplates = make([]portainer.CustomTemplate, 0) - - return customTemplates, service.connection.GetAll( - BucketName, - &portainer.CustomTemplate{}, - dataservices.AppendFn(&customTemplates), - ) -} - -// CustomTemplate returns an custom template by ID. -func (service *Service) CustomTemplate(ID portainer.CustomTemplateID) (*portainer.CustomTemplate, error) { - var customTemplate portainer.CustomTemplate - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &customTemplate) - if err != nil { - return nil, err - } - - return &customTemplate, nil -} - -// UpdateCustomTemplate updates an custom template. -func (service *Service) UpdateCustomTemplate(ID portainer.CustomTemplateID, customTemplate *portainer.CustomTemplate) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, customTemplate) -} - -// DeleteCustomTemplate deletes an custom template. -func (service *Service) DeleteCustomTemplate(ID portainer.CustomTemplateID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} - // CreateCustomTemplate uses the existing id and saves it. // TODO: where does the ID come from, and is it safe? func (service *Service) Create(customTemplate *portainer.CustomTemplate) error { - return service.connection.CreateObjectWithId(BucketName, int(customTemplate.ID), customTemplate) + return service.Connection.CreateObjectWithId(BucketName, int(customTemplate.ID), customTemplate) } // GetNextIdentifier returns the next identifier for a custom template. func (service *Service) GetNextIdentifier() int { - return service.connection.GetNextIdentifier(BucketName) + return service.Connection.GetNextIdentifier(BucketName) } diff --git a/api/dataservices/edgegroup/edgegroup.go b/api/dataservices/edgegroup/edgegroup.go index cc9c0d578..315587e19 100644 --- a/api/dataservices/edgegroup/edgegroup.go +++ b/api/dataservices/edgegroup/edgegroup.go @@ -2,6 +2,7 @@ package edgegroup import ( portainer "github.com/portainer/portainer/api" + "github.com/portainer/portainer/api/dataservices" ) // BucketName represents the name of the bucket where this service stores data. @@ -9,7 +10,7 @@ const BucketName = "edgegroups" // Service represents a service for managing Edge group data. type Service struct { - connection portainer.Connection + dataservices.BaseDataService[portainer.EdgeGroup, portainer.EdgeGroupID] } func (service *Service) BucketName() string { @@ -24,69 +25,36 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.EdgeGroup, portainer.EdgeGroupID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.EdgeGroup, portainer.EdgeGroupID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// EdgeGroups return a slice containing all the Edge groups. -func (service *Service) EdgeGroups() ([]portainer.EdgeGroup, error) { - var groups []portainer.EdgeGroup - var err error - - err = service.connection.ViewTx(func(tx portainer.Transaction) error { - groups, err = service.Tx(tx).EdgeGroups() - return err - }) - - return groups, err -} - -// EdgeGroup returns an Edge group by ID. -func (service *Service) EdgeGroup(ID portainer.EdgeGroupID) (*portainer.EdgeGroup, error) { - var group *portainer.EdgeGroup - var err error - - err = service.connection.ViewTx(func(tx portainer.Transaction) error { - group, err = service.Tx(tx).EdgeGroup(ID) - return err - }) - - return group, err -} - -// UpdateEdgeGroup updates an edge group. -func (service *Service) UpdateEdgeGroup(ID portainer.EdgeGroupID, group *portainer.EdgeGroup) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, group) -} - // Deprecated: UpdateEdgeGroupFunc updates an edge group inside a transaction avoiding data races. func (service *Service) UpdateEdgeGroupFunc(ID portainer.EdgeGroupID, updateFunc func(edgeGroup *portainer.EdgeGroup)) error { - id := service.connection.ConvertToKey(int(ID)) + id := service.Connection.ConvertToKey(int(ID)) edgeGroup := &portainer.EdgeGroup{} - return service.connection.UpdateObjectFunc(BucketName, id, edgeGroup, func() { + return service.Connection.UpdateObjectFunc(BucketName, id, edgeGroup, func() { updateFunc(edgeGroup) }) } -// DeleteEdgeGroup deletes an Edge group. -func (service *Service) DeleteEdgeGroup(ID portainer.EdgeGroupID) error { - return service.connection.UpdateTx(func(tx portainer.Transaction) error { - return service.Tx(tx).DeleteEdgeGroup(ID) - }) -} - // CreateEdgeGroup assign an ID to a new Edge group and saves it. func (service *Service) Create(group *portainer.EdgeGroup) error { - return service.connection.UpdateTx(func(tx portainer.Transaction) error { + return service.Connection.UpdateTx(func(tx portainer.Transaction) error { return service.Tx(tx).Create(group) }) } diff --git a/api/dataservices/edgegroup/tx.go b/api/dataservices/edgegroup/tx.go index 99f8d9da8..cb0372b55 100644 --- a/api/dataservices/edgegroup/tx.go +++ b/api/dataservices/edgegroup/tx.go @@ -3,48 +3,12 @@ package edgegroup import ( "errors" - "github.com/portainer/portainer/api/dataservices" - portainer "github.com/portainer/portainer/api" + "github.com/portainer/portainer/api/dataservices" ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// EdgeGroups return a slice containing all the Edge groups. -func (service ServiceTx) EdgeGroups() ([]portainer.EdgeGroup, error) { - var groups = make([]portainer.EdgeGroup, 0) - - return groups, service.tx.GetAllWithJsoniter( - BucketName, - &portainer.EdgeGroup{}, - dataservices.AppendFn(&groups), - ) -} - -// EdgeGroup returns an Edge group by ID. -func (service ServiceTx) EdgeGroup(ID portainer.EdgeGroupID) (*portainer.EdgeGroup, error) { - var group portainer.EdgeGroup - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, &group) - if err != nil { - return nil, err - } - - return &group, nil -} - -// UpdateEdgeGroup updates an edge group. -func (service ServiceTx) UpdateEdgeGroup(ID portainer.EdgeGroupID, group *portainer.EdgeGroup) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, group) + dataservices.BaseDataServiceTx[portainer.EdgeGroup, portainer.EdgeGroupID] } // UpdateEdgeGroupFunc is a no-op inside a transaction. @@ -52,14 +16,8 @@ func (service ServiceTx) UpdateEdgeGroupFunc(ID portainer.EdgeGroupID, updateFun return errors.New("cannot be called inside a transaction") } -// DeleteEdgeGroup deletes an Edge group. -func (service ServiceTx) DeleteEdgeGroup(ID portainer.EdgeGroupID) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.DeleteObject(BucketName, identifier) -} - func (service ServiceTx) Create(group *portainer.EdgeGroup) error { - return service.tx.CreateObject( + return service.Tx.CreateObject( BucketName, func(id uint64) (int, interface{}) { group.ID = portainer.EdgeGroupID(id) diff --git a/api/dataservices/edgejob/edgejob.go b/api/dataservices/edgejob/edgejob.go index ba5e3cd74..1c3c9074c 100644 --- a/api/dataservices/edgejob/edgejob.go +++ b/api/dataservices/edgejob/edgejob.go @@ -10,11 +10,7 @@ const BucketName = "edgejobs" // Service represents a service for managing edge jobs data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.EdgeJob, portainer.EdgeJobID] } // NewService creates a new instance of a service. @@ -25,75 +21,50 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.EdgeJob, portainer.EdgeJobID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.EdgeJob, portainer.EdgeJobID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// EdgeJobs returns a list of Edge jobs -func (service *Service) EdgeJobs() ([]portainer.EdgeJob, error) { - var edgeJobs = make([]portainer.EdgeJob, 0) - - return edgeJobs, service.connection.GetAll( - BucketName, - &portainer.EdgeJob{}, - dataservices.AppendFn(&edgeJobs), - ) -} - -// EdgeJob returns an Edge job by ID -func (service *Service) EdgeJob(ID portainer.EdgeJobID) (*portainer.EdgeJob, error) { - var edgeJob portainer.EdgeJob - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &edgeJob) - if err != nil { - return nil, err - } - - return &edgeJob, nil -} - // Create creates a new EdgeJob -func (service *Service) Create(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { +func (service *Service) Create(edgeJob *portainer.EdgeJob) error { + return service.CreateWithID(portainer.EdgeJobID(service.GetNextIdentifier()), edgeJob) +} + +// CreateWithID creates a new EdgeJob +func (service *Service) CreateWithID(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { edgeJob.ID = ID - return service.connection.CreateObjectWithId( + return service.Connection.CreateObjectWithId( BucketName, int(edgeJob.ID), edgeJob, ) } -// Deprecated: use UpdateEdgeJobFunc instead -func (service *Service) UpdateEdgeJob(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, edgeJob) -} - // UpdateEdgeJobFunc updates an edge job inside a transaction avoiding data races. func (service *Service) UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc func(edgeJob *portainer.EdgeJob)) error { - id := service.connection.ConvertToKey(int(ID)) + id := service.Connection.ConvertToKey(int(ID)) edgeJob := &portainer.EdgeJob{} - return service.connection.UpdateObjectFunc(BucketName, id, edgeJob, func() { + return service.Connection.UpdateObjectFunc(BucketName, id, edgeJob, func() { updateFunc(edgeJob) }) } -// DeleteEdgeJob deletes an Edge job -func (service *Service) DeleteEdgeJob(ID portainer.EdgeJobID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} - // GetNextIdentifier returns the next identifier for an environment(endpoint). func (service *Service) GetNextIdentifier() int { - return service.connection.GetNextIdentifier(BucketName) + return service.Connection.GetNextIdentifier(BucketName) } diff --git a/api/dataservices/edgejob/tx.go b/api/dataservices/edgejob/tx.go index b70d363ca..6a8111fb9 100644 --- a/api/dataservices/edgejob/tx.go +++ b/api/dataservices/edgejob/tx.go @@ -8,49 +8,19 @@ import ( ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// EdgeJobs returns a list of Edge jobs -func (service ServiceTx) EdgeJobs() ([]portainer.EdgeJob, error) { - var edgeJobs = make([]portainer.EdgeJob, 0) - - return edgeJobs, service.tx.GetAll( - BucketName, - &portainer.EdgeJob{}, - dataservices.AppendFn(&edgeJobs), - ) -} - -// EdgeJob returns an Edge job by ID -func (service ServiceTx) EdgeJob(ID portainer.EdgeJobID) (*portainer.EdgeJob, error) { - var edgeJob portainer.EdgeJob - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, &edgeJob) - if err != nil { - return nil, err - } - - return &edgeJob, nil + dataservices.BaseDataServiceTx[portainer.EdgeJob, portainer.EdgeJobID] } // Create creates a new EdgeJob -func (service ServiceTx) Create(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { - edgeJob.ID = ID - - return service.tx.CreateObjectWithId(BucketName, int(edgeJob.ID), edgeJob) +func (service ServiceTx) Create(edgeJob *portainer.EdgeJob) error { + return service.CreateWithID(portainer.EdgeJobID(service.GetNextIdentifier()), edgeJob) } -// UpdateEdgeJob updates an edge job -func (service ServiceTx) UpdateEdgeJob(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, edgeJob) +// CreateWithID creates a new EdgeJob +func (service ServiceTx) CreateWithID(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { + edgeJob.ID = ID + + return service.Tx.CreateObjectWithId(BucketName, int(edgeJob.ID), edgeJob) } // UpdateEdgeJobFunc is a no-op inside a transaction. @@ -58,14 +28,7 @@ func (service ServiceTx) UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc fu return errors.New("cannot be called inside a transaction") } -// DeleteEdgeJob deletes an Edge job -func (service ServiceTx) DeleteEdgeJob(ID portainer.EdgeJobID) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - - return service.tx.DeleteObject(BucketName, identifier) -} - // GetNextIdentifier returns the next identifier for an environment(endpoint). func (service ServiceTx) GetNextIdentifier() int { - return service.tx.GetNextIdentifier(BucketName) + return service.Tx.GetNextIdentifier(BucketName) } diff --git a/api/dataservices/endpointgroup/endpointgroup.go b/api/dataservices/endpointgroup/endpointgroup.go index c205f93a4..d509ffeb9 100644 --- a/api/dataservices/endpointgroup/endpointgroup.go +++ b/api/dataservices/endpointgroup/endpointgroup.go @@ -12,11 +12,7 @@ const ( // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.EndpointGroup, portainer.EndpointGroupID] } // NewService creates a new instance of a service. @@ -27,56 +23,26 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.EndpointGroup, portainer.EndpointGroupID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.EndpointGroup, portainer.EndpointGroupID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// EndpointGroup returns an environment(endpoint) group by ID. -func (service *Service) EndpointGroup(ID portainer.EndpointGroupID) (*portainer.EndpointGroup, error) { - var endpointGroup portainer.EndpointGroup - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &endpointGroup) - if err != nil { - return nil, err - } - - return &endpointGroup, nil -} - -// UpdateEndpointGroup updates an environment(endpoint) group. -func (service *Service) UpdateEndpointGroup(ID portainer.EndpointGroupID, endpointGroup *portainer.EndpointGroup) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, endpointGroup) -} - -// DeleteEndpointGroup deletes an environment(endpoint) group. -func (service *Service) DeleteEndpointGroup(ID portainer.EndpointGroupID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} - -// EndpointGroups return an array containing all the environment(endpoint) groups. -func (service *Service) EndpointGroups() ([]portainer.EndpointGroup, error) { - var endpointGroups = make([]portainer.EndpointGroup, 0) - - return endpointGroups, service.connection.GetAll( - BucketName, - &portainer.EndpointGroup{}, - dataservices.AppendFn(&endpointGroups), - ) -} - // CreateEndpointGroup assign an ID to a new environment(endpoint) group and saves it. func (service *Service) Create(endpointGroup *portainer.EndpointGroup) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { endpointGroup.ID = portainer.EndpointGroupID(id) diff --git a/api/dataservices/endpointgroup/tx.go b/api/dataservices/endpointgroup/tx.go index 4ea93c20b..89ffda9c0 100644 --- a/api/dataservices/endpointgroup/tx.go +++ b/api/dataservices/endpointgroup/tx.go @@ -6,53 +6,12 @@ import ( ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// EndpointGroup returns an environment(endpoint) group by ID. -func (service ServiceTx) EndpointGroup(ID portainer.EndpointGroupID) (*portainer.EndpointGroup, error) { - var endpointGroup portainer.EndpointGroup - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, &endpointGroup) - if err != nil { - return nil, err - } - - return &endpointGroup, nil -} - -// UpdateEndpointGroup updates an environment(endpoint) group. -func (service ServiceTx) UpdateEndpointGroup(ID portainer.EndpointGroupID, endpointGroup *portainer.EndpointGroup) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, endpointGroup) -} - -// DeleteEndpointGroup deletes an environment(endpoint) group. -func (service ServiceTx) DeleteEndpointGroup(ID portainer.EndpointGroupID) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.DeleteObject(BucketName, identifier) -} - -// EndpointGroups return an array containing all the environment(endpoint) groups. -func (service ServiceTx) EndpointGroups() ([]portainer.EndpointGroup, error) { - var endpointGroups = make([]portainer.EndpointGroup, 0) - - return endpointGroups, service.tx.GetAll( - BucketName, - &portainer.EndpointGroup{}, - dataservices.AppendFn(&endpointGroups), - ) + dataservices.BaseDataServiceTx[portainer.EndpointGroup, portainer.EndpointGroupID] } // CreateEndpointGroup assign an ID to a new environment(endpoint) group and saves it. func (service ServiceTx) Create(endpointGroup *portainer.EndpointGroup) error { - return service.tx.CreateObject( + return service.Tx.CreateObject( BucketName, func(id uint64) (int, interface{}) { endpointGroup.ID = portainer.EndpointGroupID(id) diff --git a/api/dataservices/fdoprofile/fdoprofile.go b/api/dataservices/fdoprofile/fdoprofile.go index b91115885..c5076d6ee 100644 --- a/api/dataservices/fdoprofile/fdoprofile.go +++ b/api/dataservices/fdoprofile/fdoprofile.go @@ -5,18 +5,12 @@ import ( "github.com/portainer/portainer/api/dataservices" ) -const ( - // BucketName represents the name of the bucket where this service stores data. - BucketName = "fdo_profiles" -) +// BucketName represents the name of the bucket where this service stores data. +const BucketName = "fdo_profiles" // Service represents a service for managingFDO Profiles data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.FDOProfile, portainer.FDOProfileID] } // NewService creates a new instance of a service. @@ -27,56 +21,23 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.FDOProfile, portainer.FDOProfileID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } -// FDOProfiles return an array containing all the FDO Profiles. -func (service *Service) FDOProfiles() ([]portainer.FDOProfile, error) { - var fdoProfiles = make([]portainer.FDOProfile, 0) - - return fdoProfiles, service.connection.GetAll( - BucketName, - &portainer.FDOProfile{}, - dataservices.AppendFn(&fdoProfiles), - ) -} - -// FDOProfile returns an FDO Profile by ID. -func (service *Service) FDOProfile(ID portainer.FDOProfileID) (*portainer.FDOProfile, error) { - var FDOProfile portainer.FDOProfile - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &FDOProfile) - if err != nil { - return nil, err - } - - return &FDOProfile, nil -} - // Create assign an ID to a new FDO Profile and saves it. func (service *Service) Create(FDOProfile *portainer.FDOProfile) error { - return service.connection.CreateObjectWithId( + return service.Connection.CreateObjectWithId( BucketName, int(FDOProfile.ID), FDOProfile, ) } -// Update updates an FDO Profile. -func (service *Service) Update(ID portainer.FDOProfileID, FDOProfile *portainer.FDOProfile) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, FDOProfile) -} - -// Delete deletes an FDO Profile. -func (service *Service) Delete(ID portainer.FDOProfileID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} - // GetNextIdentifier returns the next identifier for a FDO Profile. func (service *Service) GetNextIdentifier() int { - return service.connection.GetNextIdentifier(BucketName) + return service.Connection.GetNextIdentifier(BucketName) } diff --git a/api/dataservices/helmuserrepository/helmuserrepository.go b/api/dataservices/helmuserrepository/helmuserrepository.go index 327f30bfb..2c3e7d90d 100644 --- a/api/dataservices/helmuserrepository/helmuserrepository.go +++ b/api/dataservices/helmuserrepository/helmuserrepository.go @@ -10,11 +10,7 @@ const BucketName = "helm_user_repository" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.HelmUserRepository, portainer.HelmUserRepositoryID] } // NewService creates a new instance of a service. @@ -25,26 +21,18 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.HelmUserRepository, portainer.HelmUserRepositoryID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } -// HelmUserRepository returns an array of all HelmUserRepository -func (service *Service) HelmUserRepositories() ([]portainer.HelmUserRepository, error) { - var repos = make([]portainer.HelmUserRepository, 0) - - return repos, service.connection.GetAll( - BucketName, - &portainer.HelmUserRepository{}, - dataservices.AppendFn(&repos), - ) -} - // HelmUserRepositoryByUserID return an array containing all the HelmUserRepository objects where the specified userID is present. func (service *Service) HelmUserRepositoryByUserID(userID portainer.UserID) ([]portainer.HelmUserRepository, error) { var result = make([]portainer.HelmUserRepository, 0) - return result, service.connection.GetAll( + return result, service.Connection.GetAll( BucketName, &portainer.HelmUserRepository{}, dataservices.FilterFn(&result, func(e portainer.HelmUserRepository) bool { @@ -55,7 +43,7 @@ func (service *Service) HelmUserRepositoryByUserID(userID portainer.UserID) ([]p // CreateHelmUserRepository creates a new HelmUserRepository object. func (service *Service) Create(record *portainer.HelmUserRepository) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { record.ID = portainer.HelmUserRepositoryID(id) @@ -63,15 +51,3 @@ func (service *Service) Create(record *portainer.HelmUserRepository) error { }, ) } - -// UpdateHelmUserRepostory updates an registry. -func (service *Service) UpdateHelmUserRepository(ID portainer.HelmUserRepositoryID, registry *portainer.HelmUserRepository) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, registry) -} - -// DeleteHelmUserRepository deletes an registry. -func (service *Service) DeleteHelmUserRepository(ID portainer.HelmUserRepositoryID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/interface.go b/api/dataservices/interface.go index 9b1300be6..d1212451f 100644 --- a/api/dataservices/interface.go +++ b/api/dataservices/interface.go @@ -37,7 +37,6 @@ type ( Webhook() WebhookService } - // DataStore defines the interface to manage the data DataStore interface { Open() (newStore bool, err error) Init() error @@ -55,36 +54,22 @@ type ( // CustomTemplateService represents a service to manage custom templates CustomTemplateService interface { + BaseCRUD[portainer.CustomTemplate, portainer.CustomTemplateID] GetNextIdentifier() int - CustomTemplates() ([]portainer.CustomTemplate, error) - CustomTemplate(ID portainer.CustomTemplateID) (*portainer.CustomTemplate, error) - Create(customTemplate *portainer.CustomTemplate) error - UpdateCustomTemplate(ID portainer.CustomTemplateID, customTemplate *portainer.CustomTemplate) error - DeleteCustomTemplate(ID portainer.CustomTemplateID) error - BucketName() string } // EdgeGroupService represents a service to manage Edge groups EdgeGroupService interface { - EdgeGroups() ([]portainer.EdgeGroup, error) - EdgeGroup(ID portainer.EdgeGroupID) (*portainer.EdgeGroup, error) - Create(group *portainer.EdgeGroup) error - UpdateEdgeGroup(ID portainer.EdgeGroupID, group *portainer.EdgeGroup) error + BaseCRUD[portainer.EdgeGroup, portainer.EdgeGroupID] UpdateEdgeGroupFunc(ID portainer.EdgeGroupID, updateFunc func(group *portainer.EdgeGroup)) error - DeleteEdgeGroup(ID portainer.EdgeGroupID) error - BucketName() string } // EdgeJobService represents a service to manage Edge jobs EdgeJobService interface { - EdgeJobs() ([]portainer.EdgeJob, error) - EdgeJob(ID portainer.EdgeJobID) (*portainer.EdgeJob, error) - Create(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error - UpdateEdgeJob(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error + BaseCRUD[portainer.EdgeJob, portainer.EdgeJobID] + CreateWithID(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc func(edgeJob *portainer.EdgeJob)) error - DeleteEdgeJob(ID portainer.EdgeJobID) error GetNextIdentifier() int - BucketName() string } // EdgeStackService represents a service to manage Edge stacks @@ -117,12 +102,7 @@ type ( // EndpointGroupService represents a service for managing environment(endpoint) group data EndpointGroupService interface { - EndpointGroup(ID portainer.EndpointGroupID) (*portainer.EndpointGroup, error) - EndpointGroups() ([]portainer.EndpointGroup, error) - Create(group *portainer.EndpointGroup) error - UpdateEndpointGroup(ID portainer.EndpointGroupID, group *portainer.EndpointGroup) error - DeleteEndpointGroup(ID portainer.EndpointGroupID) error - BucketName() string + BaseCRUD[portainer.EndpointGroup, portainer.EndpointGroupID] } // EndpointRelationService represents a service for managing environment(endpoint) relations data @@ -137,23 +117,14 @@ type ( // FDOProfileService represents a service to manage FDO Profiles FDOProfileService interface { - FDOProfiles() ([]portainer.FDOProfile, error) - FDOProfile(ID portainer.FDOProfileID) (*portainer.FDOProfile, error) - Create(FDOProfile *portainer.FDOProfile) error - Update(ID portainer.FDOProfileID, FDOProfile *portainer.FDOProfile) error - Delete(ID portainer.FDOProfileID) error + BaseCRUD[portainer.FDOProfile, portainer.FDOProfileID] GetNextIdentifier() int - BucketName() string } // HelmUserRepositoryService represents a service to manage HelmUserRepositories HelmUserRepositoryService interface { - HelmUserRepositories() ([]portainer.HelmUserRepository, error) + BaseCRUD[portainer.HelmUserRepository, portainer.HelmUserRepositoryID] HelmUserRepositoryByUserID(userID portainer.UserID) ([]portainer.HelmUserRepository, error) - Create(record *portainer.HelmUserRepository) error - UpdateHelmUserRepository(ID portainer.HelmUserRepositoryID, repository *portainer.HelmUserRepository) error - DeleteHelmUserRepository(ID portainer.HelmUserRepositoryID) error - BucketName() string } // JWTService represents a service for managing JWT tokens @@ -167,40 +138,23 @@ type ( // RegistryService represents a service for managing registry data RegistryService interface { - Registry(ID portainer.RegistryID) (*portainer.Registry, error) - Registries() ([]portainer.Registry, error) - Create(registry *portainer.Registry) error - UpdateRegistry(ID portainer.RegistryID, registry *portainer.Registry) error - DeleteRegistry(ID portainer.RegistryID) error - BucketName() string + BaseCRUD[portainer.Registry, portainer.RegistryID] } // ResourceControlService represents a service for managing resource control data ResourceControlService interface { - ResourceControl(ID portainer.ResourceControlID) (*portainer.ResourceControl, error) + BaseCRUD[portainer.ResourceControl, portainer.ResourceControlID] ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) - ResourceControls() ([]portainer.ResourceControl, error) - Create(rc *portainer.ResourceControl) error - UpdateResourceControl(ID portainer.ResourceControlID, resourceControl *portainer.ResourceControl) error - DeleteResourceControl(ID portainer.ResourceControlID) error - BucketName() string } // RoleService represents a service for managing user roles RoleService interface { - Role(ID portainer.RoleID) (*portainer.Role, error) - Roles() ([]portainer.Role, error) - Create(role *portainer.Role) error - UpdateRole(ID portainer.RoleID, role *portainer.Role) error - BucketName() string + BaseCRUD[portainer.Role, portainer.RoleID] } // APIKeyRepositoryService APIKeyRepository interface { - CreateAPIKey(key *portainer.APIKey) error - GetAPIKey(keyID portainer.APIKeyID) (*portainer.APIKey, error) - UpdateAPIKey(key *portainer.APIKey) error - DeleteAPIKey(ID portainer.APIKeyID) error + BaseCRUD[portainer.APIKey, portainer.APIKeyID] GetAPIKeysByUserID(userID portainer.UserID) ([]portainer.APIKey, error) GetAPIKeyByDigest(digest []byte) (*portainer.APIKey, error) } @@ -213,12 +167,7 @@ type ( } SnapshotService interface { - Snapshot(endpointID portainer.EndpointID) (*portainer.Snapshot, error) - Snapshots() ([]portainer.Snapshot, error) - UpdateSnapshot(snapshot *portainer.Snapshot) error - DeleteSnapshot(endpointID portainer.EndpointID) error - Create(snapshot *portainer.Snapshot) error - BucketName() string + BaseCRUD[portainer.Snapshot, portainer.EndpointID] } // SSLSettingsService represents a service for managing application settings @@ -230,53 +179,33 @@ type ( // StackService represents a service for managing stack data StackService interface { - Stack(ID portainer.StackID) (*portainer.Stack, error) + BaseCRUD[portainer.Stack, portainer.StackID] StackByName(name string) (*portainer.Stack, error) StacksByName(name string) ([]portainer.Stack, error) - Stacks() ([]portainer.Stack, error) - Create(stack *portainer.Stack) error - UpdateStack(ID portainer.StackID, stack *portainer.Stack) error - DeleteStack(ID portainer.StackID) error GetNextIdentifier() int StackByWebhookID(ID string) (*portainer.Stack, error) RefreshableStacks() ([]portainer.Stack, error) - BucketName() string } // TagService represents a service for managing tag data TagService interface { - Tags() ([]portainer.Tag, error) - Tag(ID portainer.TagID) (*portainer.Tag, error) - Create(tag *portainer.Tag) error - UpdateTag(ID portainer.TagID, tag *portainer.Tag) error + BaseCRUD[portainer.Tag, portainer.TagID] UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error - DeleteTag(ID portainer.TagID) error - BucketName() string } // TeamService represents a service for managing user data TeamService interface { - Team(ID portainer.TeamID) (*portainer.Team, error) + BaseCRUD[portainer.Team, portainer.TeamID] TeamByName(name string) (*portainer.Team, error) - Teams() ([]portainer.Team, error) - Create(team *portainer.Team) error - UpdateTeam(ID portainer.TeamID, team *portainer.Team) error - DeleteTeam(ID portainer.TeamID) error - BucketName() string } // TeamMembershipService represents a service for managing team membership data TeamMembershipService interface { - TeamMembership(ID portainer.TeamMembershipID) (*portainer.TeamMembership, error) - TeamMemberships() ([]portainer.TeamMembership, error) + BaseCRUD[portainer.TeamMembership, portainer.TeamMembershipID] TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]portainer.TeamMembership, error) - Create(membership *portainer.TeamMembership) error - UpdateTeamMembership(ID portainer.TeamMembershipID, membership *portainer.TeamMembership) error - DeleteTeamMembership(ID portainer.TeamMembershipID) error DeleteTeamMembershipByUserID(userID portainer.UserID) error DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error - BucketName() string DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error } @@ -289,34 +218,24 @@ type ( // UserService represents a service for managing user data UserService interface { - User(ID portainer.UserID) (*portainer.User, error) + BaseCRUD[portainer.User, portainer.UserID] UserByUsername(username string) (*portainer.User, error) - Users() ([]portainer.User, error) UsersByRole(role portainer.UserRole) ([]portainer.User, error) - Create(user *portainer.User) error - UpdateUser(ID portainer.UserID, user *portainer.User) error - DeleteUser(ID portainer.UserID) error - BucketName() string } // VersionService represents a service for managing version data VersionService interface { - Edition() (portainer.SoftwareEdition, error) InstanceID() (string, error) UpdateInstanceID(ID string) error + Edition() (portainer.SoftwareEdition, error) Version() (*models.Version, error) UpdateVersion(*models.Version) error } // WebhookService represents a service for managing webhook data. WebhookService interface { - Webhooks() ([]portainer.Webhook, error) - Webhook(ID portainer.WebhookID) (*portainer.Webhook, error) - Create(portainer *portainer.Webhook) error - UpdateWebhook(ID portainer.WebhookID, webhook *portainer.Webhook) error + BaseCRUD[portainer.Webhook, portainer.WebhookID] WebhookByResourceID(resourceID string) (*portainer.Webhook, error) WebhookByToken(token string) (*portainer.Webhook, error) - DeleteWebhook(ID portainer.WebhookID) error - BucketName() string } ) diff --git a/api/dataservices/registry/registry.go b/api/dataservices/registry/registry.go index 1c615f1ec..359286903 100644 --- a/api/dataservices/registry/registry.go +++ b/api/dataservices/registry/registry.go @@ -10,11 +10,7 @@ const BucketName = "registries" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.Registry, portainer.RegistryID] } // NewService creates a new instance of a service. @@ -25,44 +21,26 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.Registry, portainer.RegistryID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Registry, portainer.RegistryID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// Registry returns a registry by ID. -func (service *Service) Registry(ID portainer.RegistryID) (*portainer.Registry, error) { - var registry portainer.Registry - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, ®istry) - if err != nil { - return nil, err - } - - return ®istry, nil -} - -// Registries returns an array containing all the registries. -func (service *Service) Registries() ([]portainer.Registry, error) { - var registries = make([]portainer.Registry, 0) - - return registries, service.connection.GetAll( - BucketName, - &portainer.Registry{}, - dataservices.AppendFn(®istries), - ) -} - // Create creates a new registry. func (service *Service) Create(registry *portainer.Registry) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { registry.ID = portainer.RegistryID(id) @@ -70,15 +48,3 @@ func (service *Service) Create(registry *portainer.Registry) error { }, ) } - -// UpdateRegistry updates a registry. -func (service *Service) UpdateRegistry(ID portainer.RegistryID, registry *portainer.Registry) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, registry) -} - -// DeleteRegistry deletes a registry. -func (service *Service) DeleteRegistry(ID portainer.RegistryID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/registry/tx.go b/api/dataservices/registry/tx.go index fa17a674e..6f9bcd1a6 100644 --- a/api/dataservices/registry/tx.go +++ b/api/dataservices/registry/tx.go @@ -6,41 +6,12 @@ import ( ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// Registry returns a registry by ID. -func (service ServiceTx) Registry(ID portainer.RegistryID) (*portainer.Registry, error) { - var registry portainer.Registry - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, ®istry) - if err != nil { - return nil, err - } - - return ®istry, nil -} - -// Registries returns an array containing all the registries. -func (service ServiceTx) Registries() ([]portainer.Registry, error) { - var registries = make([]portainer.Registry, 0) - - return registries, service.tx.GetAll( - BucketName, - &portainer.Registry{}, - dataservices.AppendFn(®istries), - ) + dataservices.BaseDataServiceTx[portainer.Registry, portainer.RegistryID] } // Create creates a new registry. func (service ServiceTx) Create(registry *portainer.Registry) error { - return service.tx.CreateObject( + return service.Tx.CreateObject( BucketName, func(id uint64) (int, interface{}) { registry.ID = portainer.RegistryID(id) @@ -48,15 +19,3 @@ func (service ServiceTx) Create(registry *portainer.Registry) error { }, ) } - -// UpdateRegistry updates a registry. -func (service ServiceTx) UpdateRegistry(ID portainer.RegistryID, registry *portainer.Registry) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, registry) -} - -// DeleteRegistry deletes a registry. -func (service ServiceTx) DeleteRegistry(ID portainer.RegistryID) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/resourcecontrol/resourcecontrol.go b/api/dataservices/resourcecontrol/resourcecontrol.go index 025202fcd..22e3b1914 100644 --- a/api/dataservices/resourcecontrol/resourcecontrol.go +++ b/api/dataservices/resourcecontrol/resourcecontrol.go @@ -15,11 +15,7 @@ const BucketName = "resource_control" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.ResourceControl, portainer.ResourceControlID] } // NewService creates a new instance of a service. @@ -30,44 +26,37 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.ResourceControl, portainer.ResourceControlID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.ResourceControl, portainer.ResourceControlID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// ResourceControl returns a ResourceControl object by ID -func (service *Service) ResourceControl(ID portainer.ResourceControlID) (*portainer.ResourceControl, error) { - var resourceControl portainer.ResourceControl - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &resourceControl) - if err != nil { - return nil, err - } - - return &resourceControl, nil -} - // ResourceControlByResourceIDAndType returns a ResourceControl object by checking if the resourceID is equal // to the main ResourceID or in SubResourceIDs. It also performs a check on the resource type. Return nil // if no ResourceControl was found. func (service *Service) ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) { var resourceControl *portainer.ResourceControl stop := fmt.Errorf("ok") - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.ResourceControl{}, func(obj interface{}) (interface{}, error) { rc, ok := obj.(*portainer.ResourceControl) if !ok { log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object") - return nil, fmt.Errorf("Failed to convert to ResourceControl object: %s", obj) + return nil, fmt.Errorf("failed to convert to ResourceControl object: %s", obj) } if rc.ResourceID == resourceID && rc.Type == resourceType { @@ -91,20 +80,9 @@ func (service *Service) ResourceControlByResourceIDAndType(resourceID string, re return nil, err } -// ResourceControls returns all the ResourceControl objects -func (service *Service) ResourceControls() ([]portainer.ResourceControl, error) { - var rcs = make([]portainer.ResourceControl, 0) - - return rcs, service.connection.GetAll( - BucketName, - &portainer.ResourceControl{}, - dataservices.AppendFn(&rcs), - ) -} - // CreateResourceControl creates a new ResourceControl object func (service *Service) Create(resourceControl *portainer.ResourceControl) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { resourceControl.ID = portainer.ResourceControlID(id) @@ -112,15 +90,3 @@ func (service *Service) Create(resourceControl *portainer.ResourceControl) error }, ) } - -// UpdateResourceControl saves a ResourceControl object. -func (service *Service) UpdateResourceControl(ID portainer.ResourceControlID, resourceControl *portainer.ResourceControl) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, resourceControl) -} - -// DeleteResourceControl deletes a ResourceControl object by ID -func (service *Service) DeleteResourceControl(ID portainer.ResourceControlID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/resourcecontrol/tx.go b/api/dataservices/resourcecontrol/tx.go index b188a3919..4ad4b3755 100644 --- a/api/dataservices/resourcecontrol/tx.go +++ b/api/dataservices/resourcecontrol/tx.go @@ -11,25 +11,7 @@ import ( ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// ResourceControl returns a ResourceControl object by ID -func (service ServiceTx) ResourceControl(ID portainer.ResourceControlID) (*portainer.ResourceControl, error) { - var resourceControl portainer.ResourceControl - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, &resourceControl) - if err != nil { - return nil, err - } - - return &resourceControl, nil + dataservices.BaseDataServiceTx[portainer.ResourceControl, portainer.ResourceControlID] } // ResourceControlByResourceIDAndType returns a ResourceControl object by checking if the resourceID is equal @@ -38,14 +20,14 @@ func (service ServiceTx) ResourceControl(ID portainer.ResourceControlID) (*porta func (service ServiceTx) ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) { var resourceControl *portainer.ResourceControl stop := fmt.Errorf("ok") - err := service.tx.GetAll( + err := service.Tx.GetAll( BucketName, &portainer.ResourceControl{}, func(obj interface{}) (interface{}, error) { rc, ok := obj.(*portainer.ResourceControl) if !ok { log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object") - return nil, fmt.Errorf("Failed to convert to ResourceControl object: %s", obj) + return nil, fmt.Errorf("failed to convert to ResourceControl object: %s", obj) } if rc.ResourceID == resourceID && rc.Type == resourceType { @@ -69,20 +51,9 @@ func (service ServiceTx) ResourceControlByResourceIDAndType(resourceID string, r return nil, err } -// ResourceControls returns all the ResourceControl objects -func (service ServiceTx) ResourceControls() ([]portainer.ResourceControl, error) { - var rcs = make([]portainer.ResourceControl, 0) - - return rcs, service.tx.GetAll( - BucketName, - &portainer.ResourceControl{}, - dataservices.AppendFn(&rcs), - ) -} - // CreateResourceControl creates a new ResourceControl object func (service ServiceTx) Create(resourceControl *portainer.ResourceControl) error { - return service.tx.CreateObject( + return service.Tx.CreateObject( BucketName, func(id uint64) (int, interface{}) { resourceControl.ID = portainer.ResourceControlID(id) @@ -90,15 +61,3 @@ func (service ServiceTx) Create(resourceControl *portainer.ResourceControl) erro }, ) } - -// UpdateResourceControl saves a ResourceControl object. -func (service ServiceTx) UpdateResourceControl(ID portainer.ResourceControlID, resourceControl *portainer.ResourceControl) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, resourceControl) -} - -// DeleteResourceControl deletes a ResourceControl object by ID -func (service ServiceTx) DeleteResourceControl(ID portainer.ResourceControlID) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/role/role.go b/api/dataservices/role/role.go index f0c8c54f0..a4fa07d4d 100644 --- a/api/dataservices/role/role.go +++ b/api/dataservices/role/role.go @@ -10,11 +10,7 @@ const BucketName = "roles" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.Role, portainer.RoleID] } // NewService creates a new instance of a service. @@ -25,44 +21,26 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.Role, portainer.RoleID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Role, portainer.RoleID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// Role returns a Role by ID -func (service *Service) Role(ID portainer.RoleID) (*portainer.Role, error) { - var set portainer.Role - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &set) - if err != nil { - return nil, err - } - - return &set, nil -} - -// Roles returns an array containing all the sets. -func (service *Service) Roles() ([]portainer.Role, error) { - var sets = make([]portainer.Role, 0) - - return sets, service.connection.GetAll( - BucketName, - &portainer.Role{}, - dataservices.AppendFn(&sets), - ) -} - // CreateRole creates a new Role. func (service *Service) Create(role *portainer.Role) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { role.ID = portainer.RoleID(id) @@ -70,9 +48,3 @@ func (service *Service) Create(role *portainer.Role) error { }, ) } - -// UpdateRole updates a role. -func (service *Service) UpdateRole(ID portainer.RoleID, role *portainer.Role) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, role) -} diff --git a/api/dataservices/role/tx.go b/api/dataservices/role/tx.go index a756b4957..acab8410f 100644 --- a/api/dataservices/role/tx.go +++ b/api/dataservices/role/tx.go @@ -5,43 +5,13 @@ import ( "github.com/portainer/portainer/api/dataservices" ) -// Service represents a service for managing environment(endpoint) data. type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// Role returns a Role by ID -func (service ServiceTx) Role(ID portainer.RoleID) (*portainer.Role, error) { - var set portainer.Role - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, &set) - if err != nil { - return nil, err - } - - return &set, nil -} - -// Roles returns an array containing all the sets. -func (service ServiceTx) Roles() ([]portainer.Role, error) { - var sets = make([]portainer.Role, 0) - - return sets, service.tx.GetAll( - BucketName, - &portainer.Role{}, - dataservices.AppendFn(&sets), - ) + dataservices.BaseDataServiceTx[portainer.Role, portainer.RoleID] } // CreateRole creates a new Role. func (service ServiceTx) Create(role *portainer.Role) error { - return service.tx.CreateObject( + return service.Tx.CreateObject( BucketName, func(id uint64) (int, interface{}) { role.ID = portainer.RoleID(id) @@ -49,9 +19,3 @@ func (service ServiceTx) Create(role *portainer.Role) error { }, ) } - -// UpdateRole updates a role. -func (service ServiceTx) UpdateRole(ID portainer.RoleID, role *portainer.Role) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, role) -} diff --git a/api/dataservices/snapshot/snapshot.go b/api/dataservices/snapshot/snapshot.go index 369fe17a8..4dad6a6ed 100644 --- a/api/dataservices/snapshot/snapshot.go +++ b/api/dataservices/snapshot/snapshot.go @@ -10,11 +10,7 @@ const ( ) type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.Snapshot, portainer.EndpointID] } func NewService(connection portainer.Connection) (*Service, error) { @@ -24,49 +20,23 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.Snapshot, portainer.EndpointID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Snapshot, portainer.EndpointID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -func (service *Service) Snapshot(endpointID portainer.EndpointID) (*portainer.Snapshot, error) { - var snapshot portainer.Snapshot - identifier := service.connection.ConvertToKey(int(endpointID)) - - err := service.connection.GetObject(BucketName, identifier, &snapshot) - if err != nil { - return nil, err - } - - return &snapshot, nil -} - -func (service *Service) Snapshots() ([]portainer.Snapshot, error) { - var snapshots = make([]portainer.Snapshot, 0) - - return snapshots, service.connection.GetAllWithJsoniter( - BucketName, - &portainer.Snapshot{}, - dataservices.AppendFn(&snapshots), - ) -} - -func (service *Service) UpdateSnapshot(snapshot *portainer.Snapshot) error { - identifier := service.connection.ConvertToKey(int(snapshot.EndpointID)) - return service.connection.UpdateObject(BucketName, identifier, snapshot) -} - -func (service *Service) DeleteSnapshot(endpointID portainer.EndpointID) error { - identifier := service.connection.ConvertToKey(int(endpointID)) - return service.connection.DeleteObject(BucketName, identifier) -} - func (service *Service) Create(snapshot *portainer.Snapshot) error { - return service.connection.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot) + return service.Connection.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot) } diff --git a/api/dataservices/snapshot/tx.go b/api/dataservices/snapshot/tx.go index b39b69ca2..c93a747d3 100644 --- a/api/dataservices/snapshot/tx.go +++ b/api/dataservices/snapshot/tx.go @@ -6,46 +6,9 @@ import ( ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -func (service ServiceTx) Snapshot(endpointID portainer.EndpointID) (*portainer.Snapshot, error) { - var snapshot portainer.Snapshot - identifier := service.service.connection.ConvertToKey(int(endpointID)) - - err := service.tx.GetObject(BucketName, identifier, &snapshot) - if err != nil { - return nil, err - } - - return &snapshot, nil -} - -func (service ServiceTx) Snapshots() ([]portainer.Snapshot, error) { - var snapshots = make([]portainer.Snapshot, 0) - - return snapshots, service.tx.GetAllWithJsoniter( - BucketName, - &portainer.Snapshot{}, - dataservices.AppendFn(&snapshots), - ) -} - -func (service ServiceTx) UpdateSnapshot(snapshot *portainer.Snapshot) error { - identifier := service.service.connection.ConvertToKey(int(snapshot.EndpointID)) - return service.tx.UpdateObject(BucketName, identifier, snapshot) -} - -func (service ServiceTx) DeleteSnapshot(endpointID portainer.EndpointID) error { - identifier := service.service.connection.ConvertToKey(int(endpointID)) - return service.tx.DeleteObject(BucketName, identifier) + dataservices.BaseDataServiceTx[portainer.Snapshot, portainer.EndpointID] } func (service ServiceTx) Create(snapshot *portainer.Snapshot) error { - return service.tx.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot) + return service.Tx.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot) } diff --git a/api/dataservices/stack/stack.go b/api/dataservices/stack/stack.go index cef1fdeba..57e28e4d5 100644 --- a/api/dataservices/stack/stack.go +++ b/api/dataservices/stack/stack.go @@ -14,11 +14,7 @@ const BucketName = "stacks" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.Stack, portainer.StackID] } // NewService creates a new instance of a service. @@ -29,28 +25,18 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.Stack, portainer.StackID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } -// Stack returns a stack object by ID. -func (service *Service) Stack(ID portainer.StackID) (*portainer.Stack, error) { - var stack portainer.Stack - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &stack) - if err != nil { - return nil, err - } - - return &stack, nil -} - // StackByName returns a stack object by name. func (service *Service) StackByName(name string) (*portainer.Stack, error) { var s portainer.Stack - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.Stack{}, dataservices.FirstFn(&s, func(e portainer.Stack) bool { @@ -73,7 +59,7 @@ func (service *Service) StackByName(name string) (*portainer.Stack, error) { func (service *Service) StacksByName(name string) ([]portainer.Stack, error) { var stacks = make([]portainer.Stack, 0) - return stacks, service.connection.GetAll( + return stacks, service.Connection.GetAll( BucketName, &portainer.Stack{}, dataservices.FilterFn(&stacks, func(e portainer.Stack) bool { @@ -82,37 +68,14 @@ func (service *Service) StacksByName(name string) ([]portainer.Stack, error) { ) } -// Stacks returns an array containing all the stacks. -func (service *Service) Stacks() ([]portainer.Stack, error) { - var stacks = make([]portainer.Stack, 0) - - return stacks, service.connection.GetAll( - BucketName, - &portainer.Stack{}, - dataservices.AppendFn(&stacks), - ) -} - // GetNextIdentifier returns the next identifier for a stack. func (service *Service) GetNextIdentifier() int { - return service.connection.GetNextIdentifier(BucketName) + return service.Connection.GetNextIdentifier(BucketName) } // CreateStack creates a new stack. func (service *Service) Create(stack *portainer.Stack) error { - return service.connection.CreateObjectWithId(BucketName, int(stack.ID), stack) -} - -// UpdateStack updates a stack. -func (service *Service) UpdateStack(ID portainer.StackID, stack *portainer.Stack) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, stack) -} - -// DeleteStack deletes a stack. -func (service *Service) DeleteStack(ID portainer.StackID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) + return service.Connection.CreateObjectWithId(BucketName, int(stack.ID), stack) } // StackByWebhookID returns a pointer to a stack object by webhook ID. @@ -120,7 +83,7 @@ func (service *Service) DeleteStack(ID portainer.StackID) error { func (service *Service) StackByWebhookID(id string) (*portainer.Stack, error) { var s portainer.Stack - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.Stack{}, dataservices.FirstFn(&s, func(e portainer.Stack) bool { @@ -144,7 +107,7 @@ func (service *Service) StackByWebhookID(id string) (*portainer.Stack, error) { func (service *Service) RefreshableStacks() ([]portainer.Stack, error) { stacks := make([]portainer.Stack, 0) - return stacks, service.connection.GetAll( + return stacks, service.Connection.GetAll( BucketName, &portainer.Stack{}, dataservices.FilterFn(&stacks, func(e portainer.Stack) bool { diff --git a/api/dataservices/tag/tag.go b/api/dataservices/tag/tag.go index d71700e87..0b43ccabb 100644 --- a/api/dataservices/tag/tag.go +++ b/api/dataservices/tag/tag.go @@ -12,11 +12,7 @@ const ( // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.Tag, portainer.TagID] } // NewService creates a new instance of a service. @@ -27,44 +23,26 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.Tag, portainer.TagID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Tag, portainer.TagID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// Tags return an array containing all the tags. -func (service *Service) Tags() ([]portainer.Tag, error) { - var tags = make([]portainer.Tag, 0) - - return tags, service.connection.GetAll( - BucketName, - &portainer.Tag{}, - dataservices.AppendFn(&tags), - ) -} - -// Tag returns a tag by ID. -func (service *Service) Tag(ID portainer.TagID) (*portainer.Tag, error) { - var tag portainer.Tag - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &tag) - if err != nil { - return nil, err - } - - return &tag, nil -} - // CreateTag creates a new tag. func (service *Service) Create(tag *portainer.Tag) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { tag.ID = portainer.TagID(id) @@ -73,24 +51,12 @@ func (service *Service) Create(tag *portainer.Tag) error { ) } -// Deprecated: Use UpdateTagFunc instead. -func (service *Service) UpdateTag(ID portainer.TagID, tag *portainer.Tag) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, tag) -} - // UpdateTagFunc updates a tag inside a transaction avoiding data races. func (service *Service) UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error { - id := service.connection.ConvertToKey(int(ID)) + id := service.Connection.ConvertToKey(int(ID)) tag := &portainer.Tag{} - return service.connection.UpdateObjectFunc(BucketName, id, tag, func() { + return service.Connection.UpdateObjectFunc(BucketName, id, tag, func() { updateFunc(tag) }) } - -// DeleteTag deletes a tag. -func (service *Service) DeleteTag(ID portainer.TagID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/tag/tx.go b/api/dataservices/tag/tx.go index 642f8f917..c7497613a 100644 --- a/api/dataservices/tag/tx.go +++ b/api/dataservices/tag/tx.go @@ -8,41 +8,12 @@ import ( ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// Tags return an array containing all the tags. -func (service ServiceTx) Tags() ([]portainer.Tag, error) { - var tags = make([]portainer.Tag, 0) - - return tags, service.tx.GetAll( - BucketName, - &portainer.Tag{}, - dataservices.AppendFn(&tags), - ) -} - -// Tag returns a tag by ID. -func (service ServiceTx) Tag(ID portainer.TagID) (*portainer.Tag, error) { - var tag portainer.Tag - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, &tag) - if err != nil { - return nil, err - } - - return &tag, nil + dataservices.BaseDataServiceTx[portainer.Tag, portainer.TagID] } // CreateTag creates a new tag. func (service ServiceTx) Create(tag *portainer.Tag) error { - return service.tx.CreateObject( + return service.Tx.CreateObject( BucketName, func(id uint64) (int, interface{}) { tag.ID = portainer.TagID(id) @@ -51,19 +22,7 @@ func (service ServiceTx) Create(tag *portainer.Tag) error { ) } -// UpdateTag updates a tag -func (service ServiceTx) UpdateTag(ID portainer.TagID, tag *portainer.Tag) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, tag) -} - // UpdateTagFunc is a no-op inside a transaction func (service ServiceTx) UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error { return errors.New("cannot be called inside a transaction") } - -// DeleteTag deletes a tag. -func (service ServiceTx) DeleteTag(ID portainer.TagID) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/team/team.go b/api/dataservices/team/team.go index 570532aed..e2c9089f2 100644 --- a/api/dataservices/team/team.go +++ b/api/dataservices/team/team.go @@ -14,11 +14,7 @@ const BucketName = "teams" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.Team, portainer.TeamID] } // NewService creates a new instance of a service. @@ -29,28 +25,18 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.Team, portainer.TeamID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } -// Team returns a Team by ID -func (service *Service) Team(ID portainer.TeamID) (*portainer.Team, error) { - var team portainer.Team - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &team) - if err != nil { - return nil, err - } - - return &team, nil -} - // TeamByName returns a team by name. func (service *Service) TeamByName(name string) (*portainer.Team, error) { var t portainer.Team - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.Team{}, dataservices.FirstFn(&t, func(e portainer.Team) bool { @@ -69,26 +55,9 @@ func (service *Service) TeamByName(name string) (*portainer.Team, error) { return nil, err } -// Teams return an array containing all the teams. -func (service *Service) Teams() ([]portainer.Team, error) { - var teams = make([]portainer.Team, 0) - - return teams, service.connection.GetAll( - BucketName, - &portainer.Team{}, - dataservices.AppendFn(&teams), - ) -} - -// UpdateTeam saves a Team. -func (service *Service) UpdateTeam(ID portainer.TeamID, team *portainer.Team) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, team) -} - // CreateTeam creates a new Team. func (service *Service) Create(team *portainer.Team) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { team.ID = portainer.TeamID(id) @@ -96,9 +65,3 @@ func (service *Service) Create(team *portainer.Team) error { }, ) } - -// DeleteTeam deletes a Team. -func (service *Service) DeleteTeam(ID portainer.TeamID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/teammembership/teammembership.go b/api/dataservices/teammembership/teammembership.go index 1c2a8d224..9170b7a3d 100644 --- a/api/dataservices/teammembership/teammembership.go +++ b/api/dataservices/teammembership/teammembership.go @@ -14,11 +14,7 @@ const BucketName = "team_membership" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.TeamMembership, portainer.TeamMembershipID] } // NewService creates a new instance of a service. @@ -29,46 +25,28 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.TeamMembership, portainer.TeamMembershipID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } func (service *Service) Tx(tx portainer.Transaction) ServiceTx { return ServiceTx{ - service: service, - tx: tx, + BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.TeamMembership, portainer.TeamMembershipID]{ + Bucket: BucketName, + Connection: service.Connection, + Tx: tx, + }, } } -// TeamMembership returns a TeamMembership object by ID -func (service *Service) TeamMembership(ID portainer.TeamMembershipID) (*portainer.TeamMembership, error) { - var membership portainer.TeamMembership - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &membership) - if err != nil { - return nil, err - } - - return &membership, nil -} - -// TeamMemberships return an array containing all the TeamMembership objects. -func (service *Service) TeamMemberships() ([]portainer.TeamMembership, error) { - var memberships = make([]portainer.TeamMembership, 0) - - return memberships, service.connection.GetAll( - BucketName, - &portainer.TeamMembership{}, - dataservices.AppendFn(&memberships), - ) -} - // TeamMembershipsByUserID return an array containing all the TeamMembership objects where the specified userID is present. func (service *Service) TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error) { var memberships = make([]portainer.TeamMembership, 0) - return memberships, service.connection.GetAll( + return memberships, service.Connection.GetAll( BucketName, &portainer.TeamMembership{}, dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { @@ -81,7 +59,7 @@ func (service *Service) TeamMembershipsByUserID(userID portainer.UserID) ([]port func (service *Service) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]portainer.TeamMembership, error) { var memberships = make([]portainer.TeamMembership, 0) - return memberships, service.connection.GetAll( + return memberships, service.Connection.GetAll( BucketName, &portainer.TeamMembership{}, dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { @@ -90,15 +68,9 @@ func (service *Service) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]port ) } -// UpdateTeamMembership saves a TeamMembership object. -func (service *Service) UpdateTeamMembership(ID portainer.TeamMembershipID, membership *portainer.TeamMembership) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, membership) -} - // CreateTeamMembership creates a new TeamMembership object. func (service *Service) Create(membership *portainer.TeamMembership) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { membership.ID = portainer.TeamMembershipID(id) @@ -107,15 +79,9 @@ func (service *Service) Create(membership *portainer.TeamMembership) error { ) } -// DeleteTeamMembership deletes a TeamMembership object. -func (service *Service) DeleteTeamMembership(ID portainer.TeamMembershipID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} - // DeleteTeamMembershipByUserID deletes all the TeamMembership object associated to a UserID. func (service *Service) DeleteTeamMembershipByUserID(userID portainer.UserID) error { - return service.connection.DeleteAllObjects( + return service.Connection.DeleteAllObjects( BucketName, &portainer.TeamMembership{}, func(obj interface{}) (id int, ok bool) { @@ -136,7 +102,7 @@ func (service *Service) DeleteTeamMembershipByUserID(userID portainer.UserID) er // DeleteTeamMembershipByTeamID deletes all the TeamMembership object associated to a TeamID. func (service *Service) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error { - return service.connection.DeleteAllObjects( + return service.Connection.DeleteAllObjects( BucketName, &portainer.TeamMembership{}, func(obj interface{}) (id int, ok bool) { @@ -156,7 +122,7 @@ func (service *Service) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) er } func (service *Service) DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error { - return service.connection.DeleteAllObjects( + return service.Connection.DeleteAllObjects( BucketName, &portainer.TeamMembership{}, func(obj interface{}) (id int, ok bool) { diff --git a/api/dataservices/teammembership/tx.go b/api/dataservices/teammembership/tx.go index 3216e8430..a0ca84aa0 100644 --- a/api/dataservices/teammembership/tx.go +++ b/api/dataservices/teammembership/tx.go @@ -10,43 +10,14 @@ import ( ) type ServiceTx struct { - service *Service - tx portainer.Transaction -} - -func (service ServiceTx) BucketName() string { - return BucketName -} - -// TeamMembership returns a TeamMembership object by ID -func (service ServiceTx) TeamMembership(ID portainer.TeamMembershipID) (*portainer.TeamMembership, error) { - var membership portainer.TeamMembership - identifier := service.service.connection.ConvertToKey(int(ID)) - - err := service.tx.GetObject(BucketName, identifier, &membership) - if err != nil { - return nil, err - } - - return &membership, nil -} - -// TeamMemberships return an array containing all the TeamMembership objects. -func (service ServiceTx) TeamMemberships() ([]portainer.TeamMembership, error) { - var memberships = make([]portainer.TeamMembership, 0) - - return memberships, service.tx.GetAll( - BucketName, - &portainer.TeamMembership{}, - dataservices.AppendFn(&memberships), - ) + dataservices.BaseDataServiceTx[portainer.TeamMembership, portainer.TeamMembershipID] } // TeamMembershipsByUserID return an array containing all the TeamMembership objects where the specified userID is present. func (service ServiceTx) TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error) { var memberships = make([]portainer.TeamMembership, 0) - return memberships, service.tx.GetAll( + return memberships, service.Tx.GetAll( BucketName, &portainer.TeamMembership{}, dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { @@ -59,7 +30,7 @@ func (service ServiceTx) TeamMembershipsByUserID(userID portainer.UserID) ([]por func (service ServiceTx) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]portainer.TeamMembership, error) { var memberships = make([]portainer.TeamMembership, 0) - return memberships, service.tx.GetAll( + return memberships, service.Tx.GetAll( BucketName, &portainer.TeamMembership{}, dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { @@ -68,15 +39,9 @@ func (service ServiceTx) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]por ) } -// UpdateTeamMembership saves a TeamMembership object. -func (service ServiceTx) UpdateTeamMembership(ID portainer.TeamMembershipID, membership *portainer.TeamMembership) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.UpdateObject(BucketName, identifier, membership) -} - // CreateTeamMembership creates a new TeamMembership object. func (service ServiceTx) Create(membership *portainer.TeamMembership) error { - return service.tx.CreateObject( + return service.Tx.CreateObject( BucketName, func(id uint64) (int, interface{}) { membership.ID = portainer.TeamMembershipID(id) @@ -85,15 +50,9 @@ func (service ServiceTx) Create(membership *portainer.TeamMembership) error { ) } -// DeleteTeamMembership deletes a TeamMembership object. -func (service ServiceTx) DeleteTeamMembership(ID portainer.TeamMembershipID) error { - identifier := service.service.connection.ConvertToKey(int(ID)) - return service.tx.DeleteObject(BucketName, identifier) -} - // DeleteTeamMembershipByUserID deletes all the TeamMembership object associated to a UserID. func (service ServiceTx) DeleteTeamMembershipByUserID(userID portainer.UserID) error { - return service.tx.DeleteAllObjects( + return service.Tx.DeleteAllObjects( BucketName, &portainer.TeamMembership{}, func(obj interface{}) (id int, ok bool) { @@ -114,7 +73,7 @@ func (service ServiceTx) DeleteTeamMembershipByUserID(userID portainer.UserID) e // DeleteTeamMembershipByTeamID deletes all the TeamMembership object associated to a TeamID. func (service ServiceTx) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error { - return service.tx.DeleteAllObjects( + return service.Tx.DeleteAllObjects( BucketName, &portainer.TeamMembership{}, func(obj interface{}) (id int, ok bool) { @@ -134,7 +93,7 @@ func (service ServiceTx) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) e } func (service ServiceTx) DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error { - return service.tx.DeleteAllObjects( + return service.Tx.DeleteAllObjects( BucketName, &portainer.TeamMembership{}, func(obj interface{}) (id int, ok bool) { diff --git a/api/dataservices/user/user.go b/api/dataservices/user/user.go index 7b655ece1..b3718395c 100644 --- a/api/dataservices/user/user.go +++ b/api/dataservices/user/user.go @@ -14,11 +14,7 @@ const BucketName = "users" // Service represents a service for managing environment(endpoint) data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.User, portainer.UserID] } // NewService creates a new instance of a service. @@ -29,28 +25,18 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.User, portainer.UserID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } -// User returns a user by ID -func (service *Service) User(ID portainer.UserID) (*portainer.User, error) { - var user portainer.User - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &user) - if err != nil { - return nil, err - } - - return &user, nil -} - // UserByUsername returns a user by username. func (service *Service) UserByUsername(username string) (*portainer.User, error) { var u portainer.User - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.User{}, dataservices.FirstFn(&u, func(e portainer.User) bool { @@ -69,22 +55,11 @@ func (service *Service) UserByUsername(username string) (*portainer.User, error) return nil, err } -// Users return an array containing all the users. -func (service *Service) Users() ([]portainer.User, error) { - var users = make([]portainer.User, 0) - - return users, service.connection.GetAll( - BucketName, - &portainer.User{}, - dataservices.AppendFn(&users), - ) -} - // UsersByRole return an array containing all the users with the specified role. func (service *Service) UsersByRole(role portainer.UserRole) ([]portainer.User, error) { var users = make([]portainer.User, 0) - return users, service.connection.GetAll( + return users, service.Connection.GetAll( BucketName, &portainer.User{}, dataservices.FilterFn(&users, func(e portainer.User) bool { @@ -93,16 +68,9 @@ func (service *Service) UsersByRole(role portainer.UserRole) ([]portainer.User, ) } -// UpdateUser saves a user. -func (service *Service) UpdateUser(ID portainer.UserID, user *portainer.User) error { - identifier := service.connection.ConvertToKey(int(ID)) - user.Username = strings.ToLower(user.Username) - return service.connection.UpdateObject(BucketName, identifier, user) -} - // CreateUser creates a new user. func (service *Service) Create(user *portainer.User) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { user.ID = portainer.UserID(id) @@ -112,9 +80,3 @@ func (service *Service) Create(user *portainer.User) error { }, ) } - -// DeleteUser deletes a user. -func (service *Service) DeleteUser(ID portainer.UserID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} diff --git a/api/dataservices/webhook/webhook.go b/api/dataservices/webhook/webhook.go index 7b102d532..bcef2a207 100644 --- a/api/dataservices/webhook/webhook.go +++ b/api/dataservices/webhook/webhook.go @@ -13,11 +13,7 @@ const BucketName = "webhooks" // Service represents a service for managing webhook data. type Service struct { - connection portainer.Connection -} - -func (service *Service) BucketName() string { - return BucketName + dataservices.BaseDataService[portainer.Webhook, portainer.WebhookID] } // NewService creates a new instance of a service. @@ -28,39 +24,18 @@ func NewService(connection portainer.Connection) (*Service, error) { } return &Service{ - connection: connection, + BaseDataService: dataservices.BaseDataService[portainer.Webhook, portainer.WebhookID]{ + Bucket: BucketName, + Connection: connection, + }, }, nil } -// Webhooks returns an array of all webhooks -func (service *Service) Webhooks() ([]portainer.Webhook, error) { - var webhooks = make([]portainer.Webhook, 0) - - return webhooks, service.connection.GetAll( - BucketName, - &portainer.Webhook{}, - dataservices.AppendFn(&webhooks), - ) -} - -// Webhook returns a webhook by ID. -func (service *Service) Webhook(ID portainer.WebhookID) (*portainer.Webhook, error) { - var webhook portainer.Webhook - identifier := service.connection.ConvertToKey(int(ID)) - - err := service.connection.GetObject(BucketName, identifier, &webhook) - if err != nil { - return nil, err - } - - return &webhook, nil -} - // WebhookByResourceID returns a webhook by the ResourceID it is associated with. func (service *Service) WebhookByResourceID(ID string) (*portainer.Webhook, error) { var w portainer.Webhook - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.Webhook{}, dataservices.FirstFn(&w, func(e portainer.Webhook) bool { @@ -83,7 +58,7 @@ func (service *Service) WebhookByResourceID(ID string) (*portainer.Webhook, erro func (service *Service) WebhookByToken(token string) (*portainer.Webhook, error) { var w portainer.Webhook - err := service.connection.GetAll( + err := service.Connection.GetAll( BucketName, &portainer.Webhook{}, dataservices.FirstFn(&w, func(e portainer.Webhook) bool { @@ -102,15 +77,9 @@ func (service *Service) WebhookByToken(token string) (*portainer.Webhook, error) return nil, err } -// DeleteWebhook deletes a webhook. -func (service *Service) DeleteWebhook(ID portainer.WebhookID) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.DeleteObject(BucketName, identifier) -} - // CreateWebhook assign an ID to a new webhook and saves it. func (service *Service) Create(webhook *portainer.Webhook) error { - return service.connection.CreateObject( + return service.Connection.CreateObject( BucketName, func(id uint64) (int, interface{}) { webhook.ID = portainer.WebhookID(id) @@ -118,9 +87,3 @@ func (service *Service) Create(webhook *portainer.Webhook) error { }, ) } - -// UpdateWebhook update a webhook. -func (service *Service) UpdateWebhook(ID portainer.WebhookID, webhook *portainer.Webhook) error { - identifier := service.connection.ConvertToKey(int(ID)) - return service.connection.UpdateObject(BucketName, identifier, webhook) -} diff --git a/api/datastore/datastore_test.go b/api/datastore/datastore_test.go index fe9c3012e..c5ee6a905 100644 --- a/api/datastore/datastore_test.go +++ b/api/datastore/datastore_test.go @@ -316,7 +316,7 @@ func (store *Store) testCustomTemplates(t *testing.T) { customTemplate.Create(expectedTemplate) - actualTemplate, err := customTemplate.CustomTemplate(expectedTemplate.ID) + actualTemplate, err := customTemplate.Read(expectedTemplate.ID) is.NoError(err, "CustomTemplate should not return an error") is.Equal(expectedTemplate, actualTemplate, "expected and actual template do not match") } @@ -350,11 +350,11 @@ func (store *Store) testRegistries(t *testing.T) { err = regService.Create(reg2) is.NoError(err) - actualReg1, err := regService.Registry(reg1.ID) + actualReg1, err := regService.Read(reg1.ID) is.NoError(err) is.Equal(reg1, actualReg1, "registries differ") - actualReg2, err := regService.Registry(reg2.ID) + actualReg2, err := regService.Read(reg2.ID) is.NoError(err) is.Equal(reg2, actualReg2, "registries differ") } @@ -406,11 +406,11 @@ func (store *Store) testTags(t *testing.T) { err = tags.Create(tag2) is.NoError(err, "Tags.Create should succeed") - actual, err := tags.Tag(tag1.ID) + actual, err := tags.Read(tag1.ID) is.NoError(err, "tag1 should be found") is.Equal(tag1, actual, "tags differ") - actual, err = tags.Tag(tag2.ID) + actual, err = tags.Read(tag2.ID) is.NoError(err, "tag2 should be found") is.Equal(tag2, actual, "tags differ") } diff --git a/api/datastore/init.go b/api/datastore/init.go index 4544fde07..bc8161394 100644 --- a/api/datastore/init.go +++ b/api/datastore/init.go @@ -22,7 +22,6 @@ func (store *Store) Init() error { } func (store *Store) checkOrCreateDefaultSettings() error { - isDDExtention := false if _, ok := os.LookupEnv("DOCKER_EXTENSION"); ok { isDDExtention = true @@ -73,6 +72,7 @@ func (store *Store) checkOrCreateDefaultSettings() error { settings.UserSessionTimeout = portainer.DefaultUserSessionTimeout return store.Settings().UpdateSettings(settings) } + return nil } @@ -90,7 +90,7 @@ func (store *Store) checkOrCreateDefaultSSLSettings() error { } func (store *Store) checkOrCreateDefaultData() error { - groups, err := store.EndpointGroupService.EndpointGroups() + groups, err := store.EndpointGroupService.ReadAll() if err != nil { return err } @@ -110,5 +110,6 @@ func (store *Store) checkOrCreateDefaultData() error { return err } } + return nil } diff --git a/api/datastore/migrate_dbversion33_test.go b/api/datastore/migrate_dbversion33_test.go index df964d718..a01eedcc4 100644 --- a/api/datastore/migrate_dbversion33_test.go +++ b/api/datastore/migrate_dbversion33_test.go @@ -31,22 +31,22 @@ func TestMigrateStackEntryPoint(t *testing.T) { assert.NoError(t, err, "failed to create stack") } - s, err := stackService.Stack(1) + s, err := stackService.Read(1) assert.NoError(t, err) assert.Nil(t, s.GitConfig, "first stack should not have git config") - s, err = stackService.Stack(2) + s, err = stackService.Read(2) assert.NoError(t, err) assert.Equal(t, "", s.GitConfig.ConfigFilePath, "not migrated yet migrated") err = migrator.MigrateStackEntryPoint(stackService) assert.NoError(t, err, "failed to migrate entry point to Git ConfigFilePath") - s, err = stackService.Stack(1) + s, err = stackService.Read(1) assert.NoError(t, err) assert.Nil(t, s.GitConfig, "first stack should not have git config") - s, err = stackService.Stack(2) + s, err = stackService.Read(2) assert.NoError(t, err) assert.Equal(t, "dir/sub/compose.yml", s.GitConfig.ConfigFilePath, "second stack should have config file path migrated") } diff --git a/api/datastore/migrator/migrate_dbversion17.go b/api/datastore/migrator/migrate_dbversion17.go index 0805ccf4d..0bd6cc016 100644 --- a/api/datastore/migrator/migrate_dbversion17.go +++ b/api/datastore/migrator/migrate_dbversion17.go @@ -9,7 +9,7 @@ import ( func (m *Migrator) updateUsersToDBVersion18() error { log.Info().Msg("updating users") - legacyUsers, err := m.userService.Users() + legacyUsers, err := m.userService.ReadAll() if err != nil { return err } @@ -33,7 +33,7 @@ func (m *Migrator) updateUsersToDBVersion18() error { portainer.OperationPortainerUserMemberships: true, } - err = m.userService.UpdateUser(user.ID, &user) + err = m.userService.Update(user.ID, &user) if err != nil { return err } @@ -77,7 +77,7 @@ func (m *Migrator) updateEndpointsToDBVersion18() error { func (m *Migrator) updateEndpointGroupsToDBVersion18() error { log.Info().Msg("updating endpoint groups") - legacyEndpointGroups, err := m.endpointGroupService.EndpointGroups() + legacyEndpointGroups, err := m.endpointGroupService.ReadAll() if err != nil { return err } @@ -97,7 +97,7 @@ func (m *Migrator) updateEndpointGroupsToDBVersion18() error { } } - err = m.endpointGroupService.UpdateEndpointGroup(endpointGroup.ID, &endpointGroup) + err = m.endpointGroupService.Update(endpointGroup.ID, &endpointGroup) if err != nil { return err } @@ -109,7 +109,7 @@ func (m *Migrator) updateEndpointGroupsToDBVersion18() error { func (m *Migrator) updateRegistriesToDBVersion18() error { log.Info().Msg("updating registries") - legacyRegistries, err := m.registryService.Registries() + legacyRegistries, err := m.registryService.ReadAll() if err != nil { return err } @@ -125,7 +125,7 @@ func (m *Migrator) updateRegistriesToDBVersion18() error { registry.TeamAccessPolicies[teamID] = portainer.AccessPolicy{} } - err = m.registryService.UpdateRegistry(registry.ID, ®istry) + err = m.registryService.Update(registry.ID, ®istry) if err != nil { return err } diff --git a/api/datastore/migrator/migrate_dbversion20.go b/api/datastore/migrator/migrate_dbversion20.go index 44d237964..1f02b8885 100644 --- a/api/datastore/migrator/migrate_dbversion20.go +++ b/api/datastore/migrator/migrate_dbversion20.go @@ -10,7 +10,7 @@ import ( func (m *Migrator) updateResourceControlsToDBVersion22() error { log.Info().Msg("updating resource controls") - legacyResourceControls, err := m.resourceControlService.ResourceControls() + legacyResourceControls, err := m.resourceControlService.ReadAll() if err != nil { return err } @@ -18,7 +18,7 @@ func (m *Migrator) updateResourceControlsToDBVersion22() error { for _, resourceControl := range legacyResourceControls { resourceControl.AdministratorsOnly = false - err := m.resourceControlService.UpdateResourceControl(resourceControl.ID, &resourceControl) + err := m.resourceControlService.Update(resourceControl.ID, &resourceControl) if err != nil { return err } @@ -30,7 +30,7 @@ func (m *Migrator) updateResourceControlsToDBVersion22() error { func (m *Migrator) updateUsersAndRolesToDBVersion22() error { log.Info().Msg("updating users and roles") - legacyUsers, err := m.userService.Users() + legacyUsers, err := m.userService.ReadAll() if err != nil { return err } @@ -42,47 +42,47 @@ func (m *Migrator) updateUsersAndRolesToDBVersion22() error { for _, user := range legacyUsers { user.PortainerAuthorizations = authorization.DefaultPortainerAuthorizations() - err = m.userService.UpdateUser(user.ID, &user) + err = m.userService.Update(user.ID, &user) if err != nil { return err } } - endpointAdministratorRole, err := m.roleService.Role(portainer.RoleID(1)) + endpointAdministratorRole, err := m.roleService.Read(portainer.RoleID(1)) if err != nil { return err } endpointAdministratorRole.Priority = 1 endpointAdministratorRole.Authorizations = authorization.DefaultEndpointAuthorizationsForEndpointAdministratorRole() - err = m.roleService.UpdateRole(endpointAdministratorRole.ID, endpointAdministratorRole) + err = m.roleService.Update(endpointAdministratorRole.ID, endpointAdministratorRole) - helpDeskRole, err := m.roleService.Role(portainer.RoleID(2)) + helpDeskRole, err := m.roleService.Read(portainer.RoleID(2)) if err != nil { return err } helpDeskRole.Priority = 2 helpDeskRole.Authorizations = authorization.DefaultEndpointAuthorizationsForHelpDeskRole(settings.AllowVolumeBrowserForRegularUsers) - err = m.roleService.UpdateRole(helpDeskRole.ID, helpDeskRole) + err = m.roleService.Update(helpDeskRole.ID, helpDeskRole) - standardUserRole, err := m.roleService.Role(portainer.RoleID(3)) + standardUserRole, err := m.roleService.Read(portainer.RoleID(3)) if err != nil { return err } standardUserRole.Priority = 3 standardUserRole.Authorizations = authorization.DefaultEndpointAuthorizationsForStandardUserRole(settings.AllowVolumeBrowserForRegularUsers) - err = m.roleService.UpdateRole(standardUserRole.ID, standardUserRole) + err = m.roleService.Update(standardUserRole.ID, standardUserRole) - readOnlyUserRole, err := m.roleService.Role(portainer.RoleID(4)) + readOnlyUserRole, err := m.roleService.Read(portainer.RoleID(4)) if err != nil { return err } readOnlyUserRole.Priority = 4 readOnlyUserRole.Authorizations = authorization.DefaultEndpointAuthorizationsForReadOnlyUserRole(settings.AllowVolumeBrowserForRegularUsers) - err = m.roleService.UpdateRole(readOnlyUserRole.ID, readOnlyUserRole) + err = m.roleService.Update(readOnlyUserRole.ID, readOnlyUserRole) if err != nil { return err } diff --git a/api/datastore/migrator/migrate_dbversion22.go b/api/datastore/migrator/migrate_dbversion22.go index b5de60130..ccf4665c9 100644 --- a/api/datastore/migrator/migrate_dbversion22.go +++ b/api/datastore/migrator/migrate_dbversion22.go @@ -9,7 +9,7 @@ import ( func (m *Migrator) updateTagsToDBVersion23() error { log.Info().Msg("updating tags") - tags, err := m.tagService.Tags() + tags, err := m.tagService.ReadAll() if err != nil { return err } @@ -17,7 +17,7 @@ func (m *Migrator) updateTagsToDBVersion23() error { for _, tag := range tags { tag.EndpointGroups = make(map[portainer.EndpointGroupID]bool) tag.Endpoints = make(map[portainer.EndpointID]bool) - err = m.tagService.UpdateTag(tag.ID, &tag) + err = m.tagService.Update(tag.ID, &tag) if err != nil { return err } @@ -29,7 +29,7 @@ func (m *Migrator) updateTagsToDBVersion23() error { func (m *Migrator) updateEndpointsAndEndpointGroupsToDBVersion23() error { log.Info().Msg("updating endpoints and endpoint groups") - tags, err := m.tagService.Tags() + tags, err := m.tagService.ReadAll() if err != nil { return err } @@ -70,7 +70,7 @@ func (m *Migrator) updateEndpointsAndEndpointGroupsToDBVersion23() error { } } - endpointGroups, err := m.endpointGroupService.EndpointGroups() + endpointGroups, err := m.endpointGroupService.ReadAll() if err != nil { return err } @@ -85,14 +85,14 @@ func (m *Migrator) updateEndpointsAndEndpointGroupsToDBVersion23() error { } } endpointGroup.TagIDs = endpointGroupTags - err = m.endpointGroupService.UpdateEndpointGroup(endpointGroup.ID, &endpointGroup) + err = m.endpointGroupService.Update(endpointGroup.ID, &endpointGroup) if err != nil { return err } } for _, tag := range tagsNameMap { - err = m.tagService.UpdateTag(tag.ID, &tag) + err = m.tagService.Update(tag.ID, &tag) if err != nil { return err } diff --git a/api/datastore/migrator/migrate_dbversion23.go b/api/datastore/migrator/migrate_dbversion23.go index 8e3778c34..0ccb08de0 100644 --- a/api/datastore/migrator/migrate_dbversion23.go +++ b/api/datastore/migrator/migrate_dbversion23.go @@ -24,7 +24,7 @@ func (m *Migrator) updateSettingsToDB24() error { func (m *Migrator) updateStacksToDB24() error { log.Info().Msg("updating stacks") - stacks, err := m.stackService.Stacks() + stacks, err := m.stackService.ReadAll() if err != nil { return err } @@ -32,7 +32,7 @@ func (m *Migrator) updateStacksToDB24() error { for idx := range stacks { stack := &stacks[idx] stack.Status = portainer.StackStatusActive - err := m.stackService.UpdateStack(stack.ID, stack) + err := m.stackService.Update(stack.ID, stack) if err != nil { return err } diff --git a/api/datastore/migrator/migrate_dbversion26.go b/api/datastore/migrator/migrate_dbversion26.go index bdc2674c6..9e68be231 100644 --- a/api/datastore/migrator/migrate_dbversion26.go +++ b/api/datastore/migrator/migrate_dbversion26.go @@ -11,7 +11,7 @@ import ( func (m *Migrator) updateStackResourceControlToDB27() error { log.Info().Msg("updating stack resource controls") - resourceControls, err := m.resourceControlService.ResourceControls() + resourceControls, err := m.resourceControlService.ReadAll() if err != nil { return err } @@ -34,7 +34,7 @@ func (m *Migrator) updateStackResourceControlToDB27() error { resource.ResourceID = stackutils.ResourceControlID(stack.EndpointID, stack.Name) - err = m.resourceControlService.UpdateResourceControl(resource.ID, &resource) + err = m.resourceControlService.Update(resource.ID, &resource) if err != nil { return err } diff --git a/api/datastore/migrator/migrate_dbversion31.go b/api/datastore/migrator/migrate_dbversion31.go index 04f913788..06e3b797a 100644 --- a/api/datastore/migrator/migrate_dbversion31.go +++ b/api/datastore/migrator/migrate_dbversion31.go @@ -41,7 +41,7 @@ func (m *Migrator) migrateDBVersionToDB32() error { func (m *Migrator) updateRegistriesToDB32() error { log.Info().Msg("updating registries") - registries, err := m.registryService.Registries() + registries, err := m.registryService.ReadAll() if err != nil { return err } @@ -77,7 +77,7 @@ func (m *Migrator) updateRegistriesToDB32() error { Namespaces: []string{}, } } - m.registryService.UpdateRegistry(registry.ID, ®istry) + m.registryService.Update(registry.ID, ®istry) } return nil } @@ -111,7 +111,7 @@ func (m *Migrator) updateDockerhubToDB32() error { // we only have one migrated registry entry. Duplicates will be removed // if they exist and which has been happening due to earlier migration bugs migrated := false - registries, _ := m.registryService.Registries() + registries, _ := m.registryService.ReadAll() for _, r := range registries { if r.Type == registry.Type && r.Name == registry.Name && @@ -123,7 +123,7 @@ func (m *Migrator) updateDockerhubToDB32() error { migrated = true } else { // delete subsequent duplicates - m.registryService.DeleteRegistry(portainer.RegistryID(r.ID)) + m.registryService.Delete(portainer.RegistryID(r.ID)) } } } @@ -180,7 +180,7 @@ func (m *Migrator) updateVolumeResourceControlToDB32() error { return fmt.Errorf("failed fetching environments: %w", err) } - resourceControls, err := m.resourceControlService.ResourceControls() + resourceControls, err := m.resourceControlService.ReadAll() if err != nil { return fmt.Errorf("failed fetching resource controls: %w", err) } @@ -228,12 +228,12 @@ func (m *Migrator) updateVolumeResourceControlToDB32() error { if newResourceID, ok := toUpdate[resourceControl.ID]; ok { resourceControl.ResourceID = newResourceID - err := m.resourceControlService.UpdateResourceControl(resourceControl.ID, resourceControl) + err := m.resourceControlService.Update(resourceControl.ID, resourceControl) if err != nil { return fmt.Errorf("failed updating resource control %d: %w", resourceControl.ID, err) } } else { - err := m.resourceControlService.DeleteResourceControl(resourceControl.ID) + err := m.resourceControlService.Delete(resourceControl.ID) if err != nil { return fmt.Errorf("failed deleting resource control %d: %w", resourceControl.ID, err) } diff --git a/api/datastore/migrator/migrate_dbversion33.go b/api/datastore/migrator/migrate_dbversion33.go index 880ed35cc..126829870 100644 --- a/api/datastore/migrator/migrate_dbversion33.go +++ b/api/datastore/migrator/migrate_dbversion33.go @@ -14,7 +14,7 @@ func (m *Migrator) migrateDBVersionToDB34() error { // MigrateStackEntryPoint exported for testing func MigrateStackEntryPoint(stackService dataservices.StackService) error { - stacks, err := stackService.Stacks() + stacks, err := stackService.ReadAll() if err != nil { return err } @@ -26,7 +26,7 @@ func MigrateStackEntryPoint(stackService dataservices.StackService) error { } stack.GitConfig.ConfigFilePath = stack.EntryPoint - if err := stackService.UpdateStack(stack.ID, stack); err != nil { + if err := stackService.Update(stack.ID, stack); err != nil { return err } } diff --git a/api/datastore/migrator/migrate_dbversion35.go b/api/datastore/migrator/migrate_dbversion35.go index 7b9e4a253..726ecfb9b 100644 --- a/api/datastore/migrator/migrate_dbversion35.go +++ b/api/datastore/migrator/migrate_dbversion35.go @@ -16,7 +16,7 @@ func (m *Migrator) migrateDBVersionToDB36() error { func (m *Migrator) migrateUsersToDB36() error { log.Info().Msg("updating user authorizations") - users, err := m.userService.Users() + users, err := m.userService.ReadAll() if err != nil { return err } @@ -27,7 +27,7 @@ func (m *Migrator) migrateUsersToDB36() error { currentAuthorizations[portainer.OperationPortainerUserCreateToken] = true currentAuthorizations[portainer.OperationPortainerUserRevokeToken] = true user.PortainerAuthorizations = currentAuthorizations - err = m.userService.UpdateUser(user.ID, &user) + err = m.userService.Update(user.ID, &user) if err != nil { return err } diff --git a/api/datastore/migrator/migrate_dbversion71.go b/api/datastore/migrator/migrate_dbversion71.go index 815f7de21..d1081a8f1 100644 --- a/api/datastore/migrator/migrate_dbversion71.go +++ b/api/datastore/migrator/migrate_dbversion71.go @@ -9,7 +9,7 @@ import ( func (m *Migrator) migrateDBVersionToDB71() error { log.Info().Msg("removing orphaned snapshots") - snapshots, err := m.snapshotService.Snapshots() + snapshots, err := m.snapshotService.ReadAll() if err != nil { return err } @@ -26,7 +26,7 @@ func (m *Migrator) migrateDBVersionToDB71() error { log.Debug().Int("endpoint_id", int(s.EndpointID)).Msg("removing snapshot") - err = m.snapshotService.DeleteSnapshot(s.EndpointID) + err = m.snapshotService.Delete(s.EndpointID) if err != nil { return err } diff --git a/api/datastore/migrator/migrate_dbversion90.go b/api/datastore/migrator/migrate_dbversion90.go index be8d766d7..129def8cb 100644 --- a/api/datastore/migrator/migrate_dbversion90.go +++ b/api/datastore/migrator/migrate_dbversion90.go @@ -22,7 +22,7 @@ func (m *Migrator) migrateDBVersionToDB90() error { func (m *Migrator) updateEdgeStackStatusForDB90() error { log.Info().Msg("clean up deleted endpoints from edge jobs") - edgeJobs, err := m.edgeJobService.EdgeJobs() + edgeJobs, err := m.edgeJobService.ReadAll() if err != nil { return err } @@ -33,7 +33,7 @@ func (m *Migrator) updateEdgeStackStatusForDB90() error { if dataservices.IsErrObjectNotFound(err) { delete(edgeJob.Endpoints, endpointId) - err = m.edgeJobService.UpdateEdgeJob(edgeJob.ID, &edgeJob) + err = m.edgeJobService.Update(edgeJob.ID, &edgeJob) if err != nil { return err } @@ -47,7 +47,7 @@ func (m *Migrator) updateEdgeStackStatusForDB90() error { func (m *Migrator) updateUserThemeForDB90() error { log.Info().Msg("updating existing user theme settings") - users, err := m.userService.Users() + users, err := m.userService.ReadAll() if err != nil { return err } @@ -58,7 +58,7 @@ func (m *Migrator) updateUserThemeForDB90() error { user.ThemeSettings.Color = user.UserTheme } - if err := m.userService.UpdateUser(user.ID, user); err != nil { + if err := m.userService.Update(user.ID, user); err != nil { return err } } diff --git a/api/datastore/services.go b/api/datastore/services.go index 680885b7c..efb0351a7 100644 --- a/api/datastore/services.go +++ b/api/datastore/services.go @@ -392,7 +392,7 @@ func (store *Store) Export(filename string) (err error) { backup := storeExport{} - if c, err := store.CustomTemplate().CustomTemplates(); err != nil { + if c, err := store.CustomTemplate().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Custom Templates") } @@ -400,7 +400,7 @@ func (store *Store) Export(filename string) (err error) { backup.CustomTemplate = c } - if e, err := store.EdgeGroup().EdgeGroups(); err != nil { + if e, err := store.EdgeGroup().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Edge Groups") } @@ -408,7 +408,7 @@ func (store *Store) Export(filename string) (err error) { backup.EdgeGroup = e } - if e, err := store.EdgeJob().EdgeJobs(); err != nil { + if e, err := store.EdgeJob().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Edge Jobs") } @@ -432,7 +432,7 @@ func (store *Store) Export(filename string) (err error) { backup.Endpoint = e } - if e, err := store.EndpointGroup().EndpointGroups(); err != nil { + if e, err := store.EndpointGroup().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Endpoint Groups") } @@ -456,7 +456,7 @@ func (store *Store) Export(filename string) (err error) { backup.Extensions = r } - if r, err := store.HelmUserRepository().HelmUserRepositories(); err != nil { + if r, err := store.HelmUserRepository().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Helm User Repositories") } @@ -464,7 +464,7 @@ func (store *Store) Export(filename string) (err error) { backup.HelmUserRepository = r } - if r, err := store.Registry().Registries(); err != nil { + if r, err := store.Registry().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Registries") } @@ -472,7 +472,7 @@ func (store *Store) Export(filename string) (err error) { backup.Registry = r } - if c, err := store.ResourceControl().ResourceControls(); err != nil { + if c, err := store.ResourceControl().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Resource Controls") } @@ -480,7 +480,7 @@ func (store *Store) Export(filename string) (err error) { backup.ResourceControl = c } - if role, err := store.Role().Roles(); err != nil { + if role, err := store.Role().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Roles") } @@ -504,7 +504,7 @@ func (store *Store) Export(filename string) (err error) { backup.Settings = *settings } - if snapshot, err := store.Snapshot().Snapshots(); err != nil { + if snapshot, err := store.Snapshot().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Snapshots") } @@ -520,7 +520,7 @@ func (store *Store) Export(filename string) (err error) { backup.SSLSettings = *settings } - if t, err := store.Stack().Stacks(); err != nil { + if t, err := store.Stack().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Stacks") } @@ -528,7 +528,7 @@ func (store *Store) Export(filename string) (err error) { backup.Stack = t } - if t, err := store.Tag().Tags(); err != nil { + if t, err := store.Tag().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Tags") } @@ -536,7 +536,7 @@ func (store *Store) Export(filename string) (err error) { backup.Tag = t } - if t, err := store.TeamMembership().TeamMemberships(); err != nil { + if t, err := store.TeamMembership().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Team Memberships") } @@ -544,7 +544,7 @@ func (store *Store) Export(filename string) (err error) { backup.TeamMembership = t } - if t, err := store.Team().Teams(); err != nil { + if t, err := store.Team().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Teams") } @@ -560,7 +560,7 @@ func (store *Store) Export(filename string) (err error) { backup.TunnelServer = *info } - if users, err := store.User().Users(); err != nil { + if users, err := store.User().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Users") } @@ -568,7 +568,7 @@ func (store *Store) Export(filename string) (err error) { backup.User = users } - if webhooks, err := store.Webhook().Webhooks(); err != nil { + if webhooks, err := store.Webhook().ReadAll(); err != nil { if !store.IsErrObjectNotFound(err) { log.Error().Err(err).Msg("exporting Webhooks") } @@ -611,15 +611,15 @@ func (store *Store) Import(filename string) (err error) { store.Version().UpdateVersion(&backup.Version) for _, v := range backup.CustomTemplate { - store.CustomTemplate().UpdateCustomTemplate(v.ID, &v) + store.CustomTemplate().Update(v.ID, &v) } for _, v := range backup.EdgeGroup { - store.EdgeGroup().UpdateEdgeGroup(v.ID, &v) + store.EdgeGroup().Update(v.ID, &v) } for _, v := range backup.EdgeJob { - store.EdgeJob().UpdateEdgeJob(v.ID, &v) + store.EdgeJob().Update(v.ID, &v) } for _, v := range backup.EdgeStack { @@ -631,7 +631,7 @@ func (store *Store) Import(filename string) (err error) { } for _, v := range backup.EndpointGroup { - store.EndpointGroup().UpdateEndpointGroup(v.ID, &v) + store.EndpointGroup().Update(v.ID, &v) } for _, v := range backup.EndpointRelation { @@ -639,54 +639,54 @@ func (store *Store) Import(filename string) (err error) { } for _, v := range backup.HelmUserRepository { - store.HelmUserRepository().UpdateHelmUserRepository(v.ID, &v) + store.HelmUserRepository().Update(v.ID, &v) } for _, v := range backup.Registry { - store.Registry().UpdateRegistry(v.ID, &v) + store.Registry().Update(v.ID, &v) } for _, v := range backup.ResourceControl { - store.ResourceControl().UpdateResourceControl(v.ID, &v) + store.ResourceControl().Update(v.ID, &v) } for _, v := range backup.Role { - store.Role().UpdateRole(v.ID, &v) + store.Role().Update(v.ID, &v) } store.Settings().UpdateSettings(&backup.Settings) store.SSLSettings().UpdateSettings(&backup.SSLSettings) for _, v := range backup.Snapshot { - store.Snapshot().UpdateSnapshot(&v) + store.Snapshot().Update(v.EndpointID, &v) } for _, v := range backup.Stack { - store.Stack().UpdateStack(v.ID, &v) + store.Stack().Update(v.ID, &v) } for _, v := range backup.Tag { - store.Tag().UpdateTag(v.ID, &v) + store.Tag().Update(v.ID, &v) } for _, v := range backup.TeamMembership { - store.TeamMembership().UpdateTeamMembership(v.ID, &v) + store.TeamMembership().Update(v.ID, &v) } for _, v := range backup.Team { - store.Team().UpdateTeam(v.ID, &v) + store.Team().Update(v.ID, &v) } store.TunnelServer().UpdateInfo(&backup.TunnelServer) for _, user := range backup.User { - if err := store.User().UpdateUser(user.ID, &user); err != nil { + if err := store.User().Update(user.ID, &user); err != nil { log.Debug().Str("user", fmt.Sprintf("%+v", user)).Err(err).Msg("failed to update the user in the database") } } for _, v := range backup.Webhook { - store.Webhook().UpdateWebhook(v.ID, &v) + store.Webhook().Update(v.ID, &v) } return store.connection.RestoreMetadata(backup.Metadata) diff --git a/api/demo/demo.go b/api/demo/demo.go index 0135c0e1c..79f442e80 100644 --- a/api/demo/demo.go +++ b/api/demo/demo.go @@ -73,7 +73,7 @@ func isCleanStore(store dataservices.DataStore) (bool, error) { return false, nil } - users, err := store.User().Users() + users, err := store.User().ReadAll() if err != nil { return false, err } diff --git a/api/docker/images/registry.go b/api/docker/images/registry.go index 516a19f29..440c7dc00 100644 --- a/api/docker/images/registry.go +++ b/api/docker/images/registry.go @@ -26,7 +26,7 @@ func NewRegistryClient(dataStore dataservices.DataStore) *RegistryClient { } func (c *RegistryClient) RegistryAuth(image Image) (string, string, error) { - registries, err := c.dataStore.Registry().Registries() + registries, err := c.dataStore.Registry().ReadAll() if err != nil { return "", "", err } @@ -57,7 +57,7 @@ func (c *RegistryClient) CertainRegistryAuth(registry *portainer.Registry) (stri } func (c *RegistryClient) EncodedRegistryAuth(image Image) (string, error) { - registries, err := c.dataStore.Registry().Registries() + registries, err := c.dataStore.Registry().ReadAll() if err != nil { return "", err } diff --git a/api/exec/kubernetes_deploy.go b/api/exec/kubernetes_deploy.go index ff51a8bbe..7079e0106 100644 --- a/api/exec/kubernetes_deploy.go +++ b/api/exec/kubernetes_deploy.go @@ -56,7 +56,7 @@ func (deployer *KubernetesDeployer) getToken(userID portainer.UserID, endpoint * return "", err } - user, err := deployer.dataStore.User().User(userID) + user, err := deployer.dataStore.User().Read(userID) if err != nil { return "", errors.Wrap(err, "failed to fetch the user") } diff --git a/api/http/handler/auth/authenticate.go b/api/http/handler/auth/authenticate.go index 696465a26..3a5cacb04 100644 --- a/api/http/handler/auth/authenticate.go +++ b/api/http/handler/auth/authenticate.go @@ -156,7 +156,7 @@ func (handler *Handler) syncUserTeamsWithLDAPGroups(user *portainer.User, settin return nil } - teams, err := handler.DataStore.Team().Teams() + teams, err := handler.DataStore.Team().ReadAll() if err != nil { return err } diff --git a/api/http/handler/customtemplates/customtemplate_create.go b/api/http/handler/customtemplates/customtemplate_create.go index c7c64520a..7a7cfde1d 100644 --- a/api/http/handler/customtemplates/customtemplate_create.go +++ b/api/http/handler/customtemplates/customtemplate_create.go @@ -39,7 +39,7 @@ func (handler *Handler) customTemplateCreate(w http.ResponseWriter, r *http.Requ customTemplate.CreatedByUserID = tokenData.ID - customTemplates, err := handler.DataStore.CustomTemplate().CustomTemplates() + customTemplates, err := handler.DataStore.CustomTemplate().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve custom templates from the database", err) } diff --git a/api/http/handler/customtemplates/customtemplate_delete.go b/api/http/handler/customtemplates/customtemplate_delete.go index 53b23d943..6b19d20ee 100644 --- a/api/http/handler/customtemplates/customtemplate_delete.go +++ b/api/http/handler/customtemplates/customtemplate_delete.go @@ -38,7 +38,7 @@ func (handler *Handler) customTemplateDelete(w http.ResponseWriter, r *http.Requ return httperror.InternalServerError("Unable to retrieve info from request context", err) } - customTemplate, err := handler.DataStore.CustomTemplate().CustomTemplate(portainer.CustomTemplateID(customTemplateID)) + customTemplate, err := handler.DataStore.CustomTemplate().Read(portainer.CustomTemplateID(customTemplateID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) } else if err != nil { @@ -55,7 +55,7 @@ func (handler *Handler) customTemplateDelete(w http.ResponseWriter, r *http.Requ return httperror.Forbidden("Access denied to resource", httperrors.ErrResourceAccessDenied) } - err = handler.DataStore.CustomTemplate().DeleteCustomTemplate(portainer.CustomTemplateID(customTemplateID)) + err = handler.DataStore.CustomTemplate().Delete(portainer.CustomTemplateID(customTemplateID)) if err != nil { return httperror.InternalServerError("Unable to remove the custom template from the database", err) } @@ -66,7 +66,7 @@ func (handler *Handler) customTemplateDelete(w http.ResponseWriter, r *http.Requ } if resourceControl != nil { - err = handler.DataStore.ResourceControl().DeleteResourceControl(resourceControl.ID) + err = handler.DataStore.ResourceControl().Delete(resourceControl.ID) if err != nil { return httperror.InternalServerError("Unable to remove the associated resource control from the database", err) } diff --git a/api/http/handler/customtemplates/customtemplate_file.go b/api/http/handler/customtemplates/customtemplate_file.go index 3749d6c66..b82c3c96e 100644 --- a/api/http/handler/customtemplates/customtemplate_file.go +++ b/api/http/handler/customtemplates/customtemplate_file.go @@ -33,7 +33,7 @@ func (handler *Handler) customTemplateFile(w http.ResponseWriter, r *http.Reques return httperror.BadRequest("Invalid custom template identifier route variable", err) } - customTemplate, err := handler.DataStore.CustomTemplate().CustomTemplate(portainer.CustomTemplateID(customTemplateID)) + customTemplate, err := handler.DataStore.CustomTemplate().Read(portainer.CustomTemplateID(customTemplateID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/customtemplates/customtemplate_git_fetch.go b/api/http/handler/customtemplates/customtemplate_git_fetch.go index fc7d68a85..f342c727f 100644 --- a/api/http/handler/customtemplates/customtemplate_git_fetch.go +++ b/api/http/handler/customtemplates/customtemplate_git_fetch.go @@ -34,7 +34,7 @@ func (handler *Handler) customTemplateGitFetch(w http.ResponseWriter, r *http.Re return httperror.BadRequest("Invalid Custom template identifier route variable", err) } - customTemplate, err := handler.DataStore.CustomTemplate().CustomTemplate(portainer.CustomTemplateID(customTemplateID)) + customTemplate, err := handler.DataStore.CustomTemplate().Read(portainer.CustomTemplateID(customTemplateID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) } else if err != nil { @@ -78,7 +78,7 @@ func (handler *Handler) customTemplateGitFetch(w http.ResponseWriter, r *http.Re if customTemplate.GitConfig.ConfigHash != commitHash { customTemplate.GitConfig.ConfigHash = commitHash - err = handler.DataStore.CustomTemplate().UpdateCustomTemplate(customTemplate.ID, customTemplate) + err = handler.DataStore.CustomTemplate().Update(customTemplate.ID, customTemplate) if err != nil { return httperror.InternalServerError("Unable to persist custom template changes inside the database", err) } diff --git a/api/http/handler/customtemplates/customtemplate_inspect.go b/api/http/handler/customtemplates/customtemplate_inspect.go index 7d5627f53..a22ba4b63 100644 --- a/api/http/handler/customtemplates/customtemplate_inspect.go +++ b/api/http/handler/customtemplates/customtemplate_inspect.go @@ -32,7 +32,7 @@ func (handler *Handler) customTemplateInspect(w http.ResponseWriter, r *http.Req return httperror.BadRequest("Invalid Custom template identifier route variable", err) } - customTemplate, err := handler.DataStore.CustomTemplate().CustomTemplate(portainer.CustomTemplateID(customTemplateID)) + customTemplate, err := handler.DataStore.CustomTemplate().Read(portainer.CustomTemplateID(customTemplateID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/customtemplates/customtemplate_list.go b/api/http/handler/customtemplates/customtemplate_list.go index 0b6f69d99..8d1a2a762 100644 --- a/api/http/handler/customtemplates/customtemplate_list.go +++ b/api/http/handler/customtemplates/customtemplate_list.go @@ -30,12 +30,12 @@ func (handler *Handler) customTemplateList(w http.ResponseWriter, r *http.Reques return httperror.BadRequest("Invalid Custom template type", err) } - customTemplates, err := handler.DataStore.CustomTemplate().CustomTemplates() + customTemplates, err := handler.DataStore.CustomTemplate().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve custom templates from the database", err) } - resourceControls, err := handler.DataStore.ResourceControl().ResourceControls() + resourceControls, err := handler.DataStore.ResourceControl().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve resource controls from the database", err) } @@ -48,7 +48,7 @@ func (handler *Handler) customTemplateList(w http.ResponseWriter, r *http.Reques } if !securityContext.IsAdmin { - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return httperror.InternalServerError("Unable to retrieve user information from the database", err) } diff --git a/api/http/handler/customtemplates/customtemplate_update.go b/api/http/handler/customtemplates/customtemplate_update.go index c1b5a9d54..b8eeacd78 100644 --- a/api/http/handler/customtemplates/customtemplate_update.go +++ b/api/http/handler/customtemplates/customtemplate_update.go @@ -125,7 +125,7 @@ func (handler *Handler) customTemplateUpdate(w http.ResponseWriter, r *http.Requ return httperror.BadRequest("Invalid request payload", err) } - customTemplates, err := handler.DataStore.CustomTemplate().CustomTemplates() + customTemplates, err := handler.DataStore.CustomTemplate().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve custom templates from the database", err) } @@ -136,7 +136,7 @@ func (handler *Handler) customTemplateUpdate(w http.ResponseWriter, r *http.Requ } } - customTemplate, err := handler.DataStore.CustomTemplate().CustomTemplate(portainer.CustomTemplateID(customTemplateID)) + customTemplate, err := handler.DataStore.CustomTemplate().Read(portainer.CustomTemplateID(customTemplateID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) } else if err != nil { @@ -214,7 +214,7 @@ func (handler *Handler) customTemplateUpdate(w http.ResponseWriter, r *http.Requ } } - err = handler.DataStore.CustomTemplate().UpdateCustomTemplate(customTemplate.ID, customTemplate) + err = handler.DataStore.CustomTemplate().Update(customTemplate.ID, customTemplate) if err != nil { return httperror.InternalServerError("Unable to persist custom template changes inside the database", err) } diff --git a/api/http/handler/docker/containers/recreate.go b/api/http/handler/docker/containers/recreate.go index 5e1448e77..313192d63 100644 --- a/api/http/handler/docker/containers/recreate.go +++ b/api/http/handler/docker/containers/recreate.go @@ -64,7 +64,7 @@ func (handler *Handler) recreate(w http.ResponseWriter, r *http.Request) *httper } func (handler *Handler) createResourceControl(oldContainerId string, newContainerId string) { - resourceControls, err := handler.dataStore.ResourceControl().ResourceControls() + resourceControls, err := handler.dataStore.ResourceControl().ReadAll() if err != nil { log.Error().Err(err).Msg("Exporting Resource Controls") return @@ -90,7 +90,7 @@ func (handler *Handler) updateWebhook(oldContainerId string, newContainerId stri } webhook.ResourceID = newContainerId - err = handler.dataStore.Webhook().UpdateWebhook(webhook.ID, webhook) + err = handler.dataStore.Webhook().Update(webhook.ID, webhook) if err != nil { log.Error().Err(err).Int("webhookId", int(webhook.ID)).Msg("cannot update webhook") } diff --git a/api/http/handler/edgegroups/associated_endpoints.go b/api/http/handler/edgegroups/associated_endpoints.go index 2f8adda5a..e103ada1f 100644 --- a/api/http/handler/edgegroups/associated_endpoints.go +++ b/api/http/handler/edgegroups/associated_endpoints.go @@ -21,7 +21,7 @@ func GetEndpointsByTags(tx dataservices.DataStoreTx, tagIDs []portainer.TagID, p tags := []portainer.Tag{} for _, tagID := range tagIDs { - tag, err := tx.Tag().Tag(tagID) + tag, err := tx.Tag().Read(tagID) if err != nil { return nil, err } diff --git a/api/http/handler/edgegroups/edgegroup_create.go b/api/http/handler/edgegroups/edgegroup_create.go index 80b1fcd95..c6e103e37 100644 --- a/api/http/handler/edgegroups/edgegroup_create.go +++ b/api/http/handler/edgegroups/edgegroup_create.go @@ -55,7 +55,7 @@ func (handler *Handler) edgeGroupCreate(w http.ResponseWriter, r *http.Request) var edgeGroup *portainer.EdgeGroup err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error { - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve Edge groups from the database", err) } diff --git a/api/http/handler/edgegroups/edgegroup_delete.go b/api/http/handler/edgegroups/edgegroup_delete.go index f0c18d964..061594af3 100644 --- a/api/http/handler/edgegroups/edgegroup_delete.go +++ b/api/http/handler/edgegroups/edgegroup_delete.go @@ -50,7 +50,7 @@ func (handler *Handler) edgeGroupDelete(w http.ResponseWriter, r *http.Request) } func deleteEdgeGroup(tx dataservices.DataStoreTx, ID portainer.EdgeGroupID) error { - _, err := tx.EdgeGroup().EdgeGroup(ID) + _, err := tx.EdgeGroup().Read(ID) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err) } else if err != nil { @@ -70,7 +70,7 @@ func deleteEdgeGroup(tx dataservices.DataStoreTx, ID portainer.EdgeGroupID) erro } } - edgeJobs, err := tx.EdgeJob().EdgeJobs() + edgeJobs, err := tx.EdgeJob().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err) } @@ -83,7 +83,7 @@ func deleteEdgeGroup(tx dataservices.DataStoreTx, ID portainer.EdgeGroupID) erro } } - err = tx.EdgeGroup().DeleteEdgeGroup(ID) + err = tx.EdgeGroup().Delete(ID) if err != nil { return httperror.InternalServerError("Unable to remove the Edge group from the database", err) } diff --git a/api/http/handler/edgegroups/edgegroup_inspect.go b/api/http/handler/edgegroups/edgegroup_inspect.go index c528f3757..d062a932a 100644 --- a/api/http/handler/edgegroups/edgegroup_inspect.go +++ b/api/http/handler/edgegroups/edgegroup_inspect.go @@ -42,7 +42,7 @@ func (handler *Handler) edgeGroupInspect(w http.ResponseWriter, r *http.Request) } func getEdgeGroup(tx dataservices.DataStoreTx, ID portainer.EdgeGroupID) (*portainer.EdgeGroup, error) { - edgeGroup, err := tx.EdgeGroup().EdgeGroup(ID) + edgeGroup, err := tx.EdgeGroup().Read(ID) if tx.IsErrObjectNotFound(err) { return nil, httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/edgegroups/edgegroup_list.go b/api/http/handler/edgegroups/edgegroup_list.go index fa7a53988..624be9194 100644 --- a/api/http/handler/edgegroups/edgegroup_list.go +++ b/api/http/handler/edgegroups/edgegroup_list.go @@ -46,7 +46,7 @@ func (handler *Handler) edgeGroupList(w http.ResponseWriter, r *http.Request) *h } func getEdgeGroupList(tx dataservices.DataStoreTx) ([]decoratedEdgeGroup, error) { - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return nil, httperror.InternalServerError("Unable to retrieve Edge groups from the database", err) } @@ -64,7 +64,7 @@ func getEdgeGroupList(tx dataservices.DataStoreTx) ([]decoratedEdgeGroup, error) } } - edgeJobs, err := tx.EdgeJob().EdgeJobs() + edgeJobs, err := tx.EdgeJob().ReadAll() if err != nil { return nil, httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err) } diff --git a/api/http/handler/edgegroups/edgegroup_update.go b/api/http/handler/edgegroups/edgegroup_update.go index 4596701ee..1aac90591 100644 --- a/api/http/handler/edgegroups/edgegroup_update.go +++ b/api/http/handler/edgegroups/edgegroup_update.go @@ -63,7 +63,7 @@ func (handler *Handler) edgeGroupUpdate(w http.ResponseWriter, r *http.Request) var edgeGroup *portainer.EdgeGroup err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error { - edgeGroup, err = tx.EdgeGroup().EdgeGroup(portainer.EdgeGroupID(edgeGroupID)) + edgeGroup, err = tx.EdgeGroup().Read(portainer.EdgeGroupID(edgeGroupID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err) } else if err != nil { @@ -71,7 +71,7 @@ func (handler *Handler) edgeGroupUpdate(w http.ResponseWriter, r *http.Request) } if payload.Name != "" { - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve Edge groups from the database", err) } @@ -90,7 +90,7 @@ func (handler *Handler) edgeGroupUpdate(w http.ResponseWriter, r *http.Request) return httperror.InternalServerError("Unable to retrieve environments from database", err) } - endpointGroups, err := tx.EndpointGroup().EndpointGroups() + endpointGroups, err := tx.EndpointGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve environment groups from database", err) } @@ -119,7 +119,7 @@ func (handler *Handler) edgeGroupUpdate(w http.ResponseWriter, r *http.Request) edgeGroup.PartialMatch = *payload.PartialMatch } - err = tx.EdgeGroup().UpdateEdgeGroup(edgeGroup.ID, edgeGroup) + err = tx.EdgeGroup().Update(edgeGroup.ID, edgeGroup) if err != nil { return httperror.InternalServerError("Unable to persist Edge group changes inside the database", err) } @@ -127,7 +127,7 @@ func (handler *Handler) edgeGroupUpdate(w http.ResponseWriter, r *http.Request) newRelatedEndpoints := edge.EdgeGroupRelatedEndpoints(edgeGroup, endpoints, endpointGroups) endpointsToUpdate := append(newRelatedEndpoints, oldRelatedEndpoints...) - edgeJobs, err := tx.EdgeJob().EdgeJobs() + edgeJobs, err := tx.EdgeJob().ReadAll() if err != nil { return httperror.InternalServerError("Unable to fetch Edge jobs", err) } @@ -179,12 +179,12 @@ func (handler *Handler) updateEndpointStacks(tx dataservices.DataStoreTx, endpoi return err } - endpointGroup, err := tx.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err := tx.EndpointGroup().Read(endpoint.GroupID) if err != nil { return err } - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return err } diff --git a/api/http/handler/edgejobs/edgejob_create.go b/api/http/handler/edgejobs/edgejob_create.go index 68c9f4d87..2d94aab0d 100644 --- a/api/http/handler/edgejobs/edgejob_create.go +++ b/api/http/handler/edgejobs/edgejob_create.go @@ -285,5 +285,5 @@ func (handler *Handler) addAndPersistEdgeJob(tx dataservices.DataStoreTx, edgeJo handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob) } - return tx.EdgeJob().Create(edgeJob.ID, edgeJob) + return tx.EdgeJob().CreateWithID(edgeJob.ID, edgeJob) } diff --git a/api/http/handler/edgejobs/edgejob_delete.go b/api/http/handler/edgejobs/edgejob_delete.go index 23e921f89..b1878e56c 100644 --- a/api/http/handler/edgejobs/edgejob_delete.go +++ b/api/http/handler/edgejobs/edgejob_delete.go @@ -55,7 +55,7 @@ func (handler *Handler) edgeJobDelete(w http.ResponseWriter, r *http.Request) *h } func (handler *Handler) deleteEdgeJob(tx dataservices.DataStoreTx, edgeJobID portainer.EdgeJobID) error { - edgeJob, err := tx.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := tx.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) } else if err != nil { @@ -87,7 +87,7 @@ func (handler *Handler) deleteEdgeJob(tx dataservices.DataStoreTx, edgeJobID por handler.ReverseTunnelService.RemoveEdgeJobFromEndpoint(endpointID, edgeJob.ID) } - err = tx.EdgeJob().DeleteEdgeJob(edgeJob.ID) + err = tx.EdgeJob().Delete(edgeJob.ID) if err != nil { return httperror.InternalServerError("Unable to remove the Edge job from the database", err) } diff --git a/api/http/handler/edgejobs/edgejob_file.go b/api/http/handler/edgejobs/edgejob_file.go index 0c06586e5..0cc8fb141 100644 --- a/api/http/handler/edgejobs/edgejob_file.go +++ b/api/http/handler/edgejobs/edgejob_file.go @@ -32,7 +32,7 @@ func (handler *Handler) edgeJobFile(w http.ResponseWriter, r *http.Request) *htt return httperror.BadRequest("Invalid Edge job identifier route variable", err) } - edgeJob, err := handler.DataStore.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := handler.DataStore.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/edgejobs/edgejob_inspect.go b/api/http/handler/edgejobs/edgejob_inspect.go index 643608d15..52a82ebf5 100644 --- a/api/http/handler/edgejobs/edgejob_inspect.go +++ b/api/http/handler/edgejobs/edgejob_inspect.go @@ -33,7 +33,7 @@ func (handler *Handler) edgeJobInspect(w http.ResponseWriter, r *http.Request) * return httperror.BadRequest("Invalid Edge job identifier route variable", err) } - edgeJob, err := handler.DataStore.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := handler.DataStore.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/edgejobs/edgejob_list.go b/api/http/handler/edgejobs/edgejob_list.go index 651baac51..f54b8d091 100644 --- a/api/http/handler/edgejobs/edgejob_list.go +++ b/api/http/handler/edgejobs/edgejob_list.go @@ -21,7 +21,7 @@ import ( // @router /edge_jobs [get] // GET request on /api/edge_jobs func (handler *Handler) edgeJobList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - edgeJobs, err := handler.DataStore.EdgeJob().EdgeJobs() + edgeJobs, err := handler.DataStore.EdgeJob().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err) } diff --git a/api/http/handler/edgejobs/edgejob_tasklogs_clear.go b/api/http/handler/edgejobs/edgejob_tasklogs_clear.go index d71e3e91e..e54c59029 100644 --- a/api/http/handler/edgejobs/edgejob_tasklogs_clear.go +++ b/api/http/handler/edgejobs/edgejob_tasklogs_clear.go @@ -68,7 +68,7 @@ func (handler *Handler) edgeJobTasksClear(w http.ResponseWriter, r *http.Request updateEdgeJobFn := func(edgeJob *portainer.EdgeJob, endpointID portainer.EndpointID, endpointsFromGroups []portainer.EndpointID) error { mutationFn(edgeJob, endpointID, endpointsFromGroups) - return tx.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob) + return tx.EdgeJob().Update(edgeJob.ID, edgeJob) } return handler.clearEdgeJobTaskLogs(tx, portainer.EdgeJobID(edgeJobID), portainer.EndpointID(taskID), updateEdgeJobFn) @@ -88,7 +88,7 @@ func (handler *Handler) edgeJobTasksClear(w http.ResponseWriter, r *http.Request } func (handler *Handler) clearEdgeJobTaskLogs(tx dataservices.DataStoreTx, edgeJobID portainer.EdgeJobID, endpointID portainer.EndpointID, updateEdgeJob func(*portainer.EdgeJob, portainer.EndpointID, []portainer.EndpointID) error) error { - edgeJob, err := tx.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := tx.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/edgejobs/edgejob_tasklogs_collect.go b/api/http/handler/edgejobs/edgejob_tasklogs_collect.go index 0bf5952ff..d3767784d 100644 --- a/api/http/handler/edgejobs/edgejob_tasklogs_collect.go +++ b/api/http/handler/edgejobs/edgejob_tasklogs_collect.go @@ -39,7 +39,7 @@ func (handler *Handler) edgeJobTasksCollect(w http.ResponseWriter, r *http.Reque } err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error { - edgeJob, err := tx.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := tx.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) } else if err != nil { @@ -64,7 +64,7 @@ func (handler *Handler) edgeJobTasksCollect(w http.ResponseWriter, r *http.Reque edgeJob.Endpoints[endpointID] = meta } - err = tx.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob) + err = tx.EdgeJob().Update(edgeJob.ID, edgeJob) if err != nil { return httperror.InternalServerError("Unable to persist Edge job changes in the database", err) } diff --git a/api/http/handler/edgejobs/edgejob_tasks_list.go b/api/http/handler/edgejobs/edgejob_tasks_list.go index b8a19d134..f7099eeca 100644 --- a/api/http/handler/edgejobs/edgejob_tasks_list.go +++ b/api/http/handler/edgejobs/edgejob_tasks_list.go @@ -52,7 +52,7 @@ func (handler *Handler) edgeJobTasksList(w http.ResponseWriter, r *http.Request) } func listEdgeJobTasks(tx dataservices.DataStoreTx, edgeJobID portainer.EdgeJobID) ([]taskContainer, error) { - edgeJob, err := tx.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := tx.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if tx.IsErrObjectNotFound(err) { return nil, httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/edgejobs/edgejob_update.go b/api/http/handler/edgejobs/edgejob_update.go index 90ca51854..5cf92aa03 100644 --- a/api/http/handler/edgejobs/edgejob_update.go +++ b/api/http/handler/edgejobs/edgejob_update.go @@ -76,7 +76,7 @@ func (handler *Handler) edgeJobUpdate(w http.ResponseWriter, r *http.Request) *h } func (handler *Handler) updateEdgeJob(tx dataservices.DataStoreTx, edgeJobID portainer.EdgeJobID, payload edgeJobUpdatePayload) (*portainer.EdgeJob, error) { - edgeJob, err := tx.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := tx.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if tx.IsErrObjectNotFound(err) { return nil, httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) } else if err != nil { @@ -88,7 +88,7 @@ func (handler *Handler) updateEdgeJob(tx dataservices.DataStoreTx, edgeJobID por return nil, httperror.InternalServerError("Unable to update Edge job", err) } - err = tx.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob) + err = tx.EdgeJob().Update(edgeJob.ID, edgeJob) if err != nil { return nil, httperror.InternalServerError("Unable to persist Edge job changes inside the database", err) } @@ -154,7 +154,7 @@ func (handler *Handler) updateEdgeSchedule(tx dataservices.DataStoreTx, edgeJob if len(payload.EdgeGroups) > 0 { for _, edgeGroupID := range payload.EdgeGroups { - _, err := tx.EdgeGroup().EdgeGroup(edgeGroupID) + _, err := tx.EdgeGroup().Read(edgeGroupID) if err != nil { return err } diff --git a/api/http/handler/endpointedge/endpoint_edgejob_logs.go b/api/http/handler/endpointedge/endpoint_edgejob_logs.go index 48d85bf05..0a9d758f9 100644 --- a/api/http/handler/endpointedge/endpoint_edgejob_logs.go +++ b/api/http/handler/endpointedge/endpoint_edgejob_logs.go @@ -84,7 +84,7 @@ func (handler *Handler) getEdgeJobLobs(tx dataservices.DataStoreTx, endpointID p return httperror.InternalServerError("Unable to find an environment with the specified identifier inside the database", err) } - edgeJob, err := tx.EdgeJob().EdgeJob(portainer.EdgeJobID(edgeJobID)) + edgeJob, err := tx.EdgeJob().Read(portainer.EdgeJobID(edgeJobID)) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an edge job with the specified identifier inside the database", err) } else if err != nil { @@ -103,7 +103,7 @@ func (handler *Handler) getEdgeJobLobs(tx dataservices.DataStoreTx, endpointID p edgeJob.Endpoints[endpoint.ID] = meta } - err = tx.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob) + err = tx.EdgeJob().Update(edgeJob.ID, edgeJob) handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob) diff --git a/api/http/handler/endpointgroups/endpointgroup_create.go b/api/http/handler/endpointgroups/endpointgroup_create.go index 464a894a0..8cbcc4de9 100644 --- a/api/http/handler/endpointgroups/endpointgroup_create.go +++ b/api/http/handler/endpointgroups/endpointgroup_create.go @@ -133,14 +133,14 @@ func (handler *Handler) createEndpointGroup(tx dataservices.DataStoreTx, payload continue } - tag, err := tx.Tag().Tag(tagID) + tag, err := tx.Tag().Read(tagID) if err != nil { return nil, httperror.InternalServerError("Unable to find a tag inside the database", err) } tag.EndpointGroups[endpointGroup.ID] = true - err = tx.Tag().UpdateTag(tagID, tag) + err = tx.Tag().Update(tagID, tag) if err != nil { return nil, httperror.InternalServerError("Unable to persist tag changes inside the database", err) } diff --git a/api/http/handler/endpointgroups/endpointgroup_delete.go b/api/http/handler/endpointgroups/endpointgroup_delete.go index 5869c5720..aa670e141 100644 --- a/api/http/handler/endpointgroups/endpointgroup_delete.go +++ b/api/http/handler/endpointgroups/endpointgroup_delete.go @@ -56,14 +56,14 @@ func (handler *Handler) endpointGroupDelete(w http.ResponseWriter, r *http.Reque } func (handler *Handler) deleteEndpointGroup(tx dataservices.DataStoreTx, endpointGroupID portainer.EndpointGroupID) error { - endpointGroup, err := tx.EndpointGroup().EndpointGroup(endpointGroupID) + endpointGroup, err := tx.EndpointGroup().Read(endpointGroupID) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) } else if err != nil { return httperror.InternalServerError("Unable to find an environment group with the specified identifier inside the database", err) } - err = tx.EndpointGroup().DeleteEndpointGroup(endpointGroupID) + err = tx.EndpointGroup().Delete(endpointGroupID) if err != nil { return httperror.InternalServerError("Unable to remove the environment group from the database", err) } @@ -103,14 +103,14 @@ func (handler *Handler) deleteEndpointGroup(tx dataservices.DataStoreTx, endpoin continue } - tag, err := tx.Tag().Tag(tagID) + tag, err := tx.Tag().Read(tagID) if tx.IsErrObjectNotFound(err) { return httperror.InternalServerError("Unable to find a tag inside the database", err) } delete(tag.EndpointGroups, endpointGroup.ID) - err = tx.Tag().UpdateTag(tagID, tag) + err = tx.Tag().Update(tagID, tag) if err != nil { return httperror.InternalServerError("Unable to persist tag changes inside the database", err) } diff --git a/api/http/handler/endpointgroups/endpointgroup_endpoint_add.go b/api/http/handler/endpointgroups/endpointgroup_endpoint_add.go index 1edfbbce0..f682c5b70 100644 --- a/api/http/handler/endpointgroups/endpointgroup_endpoint_add.go +++ b/api/http/handler/endpointgroups/endpointgroup_endpoint_add.go @@ -58,7 +58,7 @@ func (handler *Handler) endpointGroupAddEndpoint(w http.ResponseWriter, r *http. } func (handler *Handler) addEndpoint(tx dataservices.DataStoreTx, endpointGroupID portainer.EndpointGroupID, endpointID portainer.EndpointID) error { - endpointGroup, err := tx.EndpointGroup().EndpointGroup(portainer.EndpointGroupID(endpointGroupID)) + endpointGroup, err := tx.EndpointGroup().Read(portainer.EndpointGroupID(endpointGroupID)) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/endpointgroups/endpointgroup_endpoint_delete.go b/api/http/handler/endpointgroups/endpointgroup_endpoint_delete.go index 6a2a047d3..db7891b93 100644 --- a/api/http/handler/endpointgroups/endpointgroup_endpoint_delete.go +++ b/api/http/handler/endpointgroups/endpointgroup_endpoint_delete.go @@ -57,7 +57,7 @@ func (handler *Handler) endpointGroupDeleteEndpoint(w http.ResponseWriter, r *ht } func (handler *Handler) removeEndpoint(tx dataservices.DataStoreTx, endpointGroupID portainer.EndpointGroupID, endpointID portainer.EndpointID) error { - _, err := tx.EndpointGroup().EndpointGroup(portainer.EndpointGroupID(endpointGroupID)) + _, err := tx.EndpointGroup().Read(portainer.EndpointGroupID(endpointGroupID)) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/endpointgroups/endpointgroup_inspect.go b/api/http/handler/endpointgroups/endpointgroup_inspect.go index df0f19832..169473a1a 100644 --- a/api/http/handler/endpointgroups/endpointgroup_inspect.go +++ b/api/http/handler/endpointgroups/endpointgroup_inspect.go @@ -29,7 +29,7 @@ func (handler *Handler) endpointGroupInspect(w http.ResponseWriter, r *http.Requ return httperror.BadRequest("Invalid environment group identifier route variable", err) } - endpointGroup, err := handler.DataStore.EndpointGroup().EndpointGroup(portainer.EndpointGroupID(endpointGroupID)) + endpointGroup, err := handler.DataStore.EndpointGroup().Read(portainer.EndpointGroupID(endpointGroupID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/endpointgroups/endpointgroup_list.go b/api/http/handler/endpointgroups/endpointgroup_list.go index d2c89a13a..fd15089f6 100644 --- a/api/http/handler/endpointgroups/endpointgroup_list.go +++ b/api/http/handler/endpointgroups/endpointgroup_list.go @@ -22,7 +22,7 @@ import ( // @failure 500 "Server error" // @router /endpoint_groups [get] func (handler *Handler) endpointGroupList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - endpointGroups, err := handler.DataStore.EndpointGroup().EndpointGroups() + endpointGroups, err := handler.DataStore.EndpointGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) } diff --git a/api/http/handler/endpointgroups/endpointgroup_update.go b/api/http/handler/endpointgroups/endpointgroup_update.go index 0bdfec41d..f3c3993a7 100644 --- a/api/http/handler/endpointgroups/endpointgroup_update.go +++ b/api/http/handler/endpointgroups/endpointgroup_update.go @@ -80,7 +80,7 @@ func (handler *Handler) endpointGroupUpdate(w http.ResponseWriter, r *http.Reque } func (handler *Handler) updateEndpointGroup(tx dataservices.DataStoreTx, endpointGroupID portainer.EndpointGroupID, payload endpointGroupUpdatePayload) (*portainer.EndpointGroup, error) { - endpointGroup, err := tx.EndpointGroup().EndpointGroup(portainer.EndpointGroupID(endpointGroupID)) + endpointGroup, err := tx.EndpointGroup().Read(portainer.EndpointGroupID(endpointGroupID)) if tx.IsErrObjectNotFound(err) { return nil, httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) } else if err != nil { @@ -121,14 +121,14 @@ func (handler *Handler) updateEndpointGroup(tx dataservices.DataStoreTx, endpoin continue } - tag, err := tx.Tag().Tag(tagID) + tag, err := tx.Tag().Read(tagID) if err != nil { return nil, httperror.InternalServerError("Unable to find a tag inside the database", err) } delete(tag.EndpointGroups, endpointGroup.ID) - err = tx.Tag().UpdateTag(tagID, tag) + err = tx.Tag().Update(tagID, tag) if err != nil { return nil, httperror.InternalServerError("Unable to persist tag changes inside the database", err) } @@ -150,14 +150,14 @@ func (handler *Handler) updateEndpointGroup(tx dataservices.DataStoreTx, endpoin continue } - tag, err := tx.Tag().Tag(tagID) + tag, err := tx.Tag().Read(tagID) if err != nil { return nil, httperror.InternalServerError("Unable to find a tag inside the database", err) } tag.EndpointGroups[endpointGroup.ID] = true - err = tx.Tag().UpdateTag(tagID, tag) + err = tx.Tag().Update(tagID, tag) if err != nil { return nil, httperror.InternalServerError("Unable to persist tag changes inside the database", err) } @@ -194,7 +194,7 @@ func (handler *Handler) updateEndpointGroup(tx dataservices.DataStoreTx, endpoin } } - err = tx.EndpointGroup().UpdateEndpointGroup(endpointGroup.ID, endpointGroup) + err = tx.EndpointGroup().Update(endpointGroup.ID, endpointGroup) if err != nil { return nil, httperror.InternalServerError("Unable to persist environment group changes inside the database", err) } diff --git a/api/http/handler/endpointgroups/endpoints.go b/api/http/handler/endpointgroups/endpoints.go index 7e6462415..b7c9771bb 100644 --- a/api/http/handler/endpointgroups/endpoints.go +++ b/api/http/handler/endpointgroups/endpoints.go @@ -12,7 +12,7 @@ func (handler *Handler) updateEndpointRelations(tx dataservices.DataStoreTx, end } if endpointGroup == nil { - unassignedGroup, err := tx.EndpointGroup().EndpointGroup(portainer.EndpointGroupID(1)) + unassignedGroup, err := tx.EndpointGroup().Read(portainer.EndpointGroupID(1)) if err != nil { return err } @@ -25,7 +25,7 @@ func (handler *Handler) updateEndpointRelations(tx dataservices.DataStoreTx, end return err } - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return err } diff --git a/api/http/handler/endpoints/endpoint_agent_versions.go b/api/http/handler/endpoints/endpoint_agent_versions.go index 9d4e62414..71f9d98eb 100644 --- a/api/http/handler/endpoints/endpoint_agent_versions.go +++ b/api/http/handler/endpoints/endpoint_agent_versions.go @@ -22,7 +22,7 @@ import ( // @router /endpoints/agent_versions [get] func (handler *Handler) agentVersions(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - endpointGroups, err := handler.DataStore.EndpointGroup().EndpointGroups() + endpointGroups, err := handler.DataStore.EndpointGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) } diff --git a/api/http/handler/endpoints/endpoint_create.go b/api/http/handler/endpoints/endpoint_create.go index 05049c7a2..15eeef5f7 100644 --- a/api/http/handler/endpoints/endpoint_create.go +++ b/api/http/handler/endpoints/endpoint_create.go @@ -222,12 +222,12 @@ func (handler *Handler) endpointCreate(w http.ResponseWriter, r *http.Request) * return endpointCreationError } - endpointGroup, err := handler.DataStore.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err := handler.DataStore.EndpointGroup().Read(endpoint.GroupID) if err != nil { return httperror.InternalServerError("Unable to find an environment group inside the database", err) } - edgeGroups, err := handler.DataStore.EdgeGroup().EdgeGroups() + edgeGroups, err := handler.DataStore.EdgeGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve edge groups from the database", err) } diff --git a/api/http/handler/endpoints/endpoint_delete.go b/api/http/handler/endpoints/endpoint_delete.go index 68c91e484..c5f3e863f 100644 --- a/api/http/handler/endpoints/endpoint_delete.go +++ b/api/http/handler/endpoints/endpoint_delete.go @@ -50,7 +50,7 @@ func (handler *Handler) endpointDelete(w http.ResponseWriter, r *http.Request) * } } - err = handler.DataStore.Snapshot().DeleteSnapshot(portainer.EndpointID(endpointID)) + err = handler.DataStore.Snapshot().Delete(portainer.EndpointID(endpointID)) if err != nil { return httperror.InternalServerError("Unable to remove the snapshot from the database", err) } @@ -79,7 +79,7 @@ func (handler *Handler) endpointDelete(w http.ResponseWriter, r *http.Request) * } } - edgeGroups, err := handler.DataStore.EdgeGroup().EdgeGroups() + edgeGroups, err := handler.DataStore.EdgeGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve edge groups from the database", err) } @@ -109,7 +109,7 @@ func (handler *Handler) endpointDelete(w http.ResponseWriter, r *http.Request) * } } - registries, err := handler.DataStore.Registry().Registries() + registries, err := handler.DataStore.Registry().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve registries from the database", err) } @@ -118,7 +118,7 @@ func (handler *Handler) endpointDelete(w http.ResponseWriter, r *http.Request) * registry := ®istries[idx] if _, ok := registry.RegistryAccesses[endpoint.ID]; ok { delete(registry.RegistryAccesses, endpoint.ID) - err = handler.DataStore.Registry().UpdateRegistry(registry.ID, registry) + err = handler.DataStore.Registry().Update(registry.ID, registry) if err != nil { return httperror.InternalServerError("Unable to update registry accesses", err) } @@ -129,7 +129,7 @@ func (handler *Handler) endpointDelete(w http.ResponseWriter, r *http.Request) * return response.Empty(w) } - edgeJobs, err := handler.DataStore.EdgeJob().EdgeJobs() + edgeJobs, err := handler.DataStore.EdgeJob().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve edge jobs from the database", err) } diff --git a/api/http/handler/endpoints/endpoint_delete_test.go b/api/http/handler/endpoints/endpoint_delete_test.go index 96631d1a4..8eb3e982c 100644 --- a/api/http/handler/endpoints/endpoint_delete_test.go +++ b/api/http/handler/endpoints/endpoint_delete_test.go @@ -75,7 +75,7 @@ func TestEndpointDeleteEdgeGroupsConcurrently(t *testing.T) { // Check that the edge group is consistent - edgeGroup, err := handler.DataStore.EdgeGroup().EdgeGroup(1) + edgeGroup, err := handler.DataStore.EdgeGroup().Read(1) if err != nil { t.Fatal("could not retrieve the edge group:", err) } diff --git a/api/http/handler/endpoints/endpoint_dockerhub_status.go b/api/http/handler/endpoints/endpoint_dockerhub_status.go index a102c695b..ab3972c25 100644 --- a/api/http/handler/endpoints/endpoint_dockerhub_status.go +++ b/api/http/handler/endpoints/endpoint_dockerhub_status.go @@ -67,7 +67,7 @@ func (handler *Handler) endpointDockerhubStatus(w http.ResponseWriter, r *http.R if registryID == 0 { registry = &portainer.Registry{} } else { - registry, err = handler.DataStore.Registry().Registry(portainer.RegistryID(registryID)) + registry, err = handler.DataStore.Registry().Read(portainer.RegistryID(registryID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a registry with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/endpoints/endpoint_list.go b/api/http/handler/endpoints/endpoint_list.go index ef3555ca4..79bcd9ead 100644 --- a/api/http/handler/endpoints/endpoint_list.go +++ b/api/http/handler/endpoints/endpoint_list.go @@ -61,7 +61,7 @@ func (handler *Handler) endpointList(w http.ResponseWriter, r *http.Request) *ht sortField, _ := request.RetrieveQueryParameter(r, "sort", true) sortOrder, _ := request.RetrieveQueryParameter(r, "order", true) - endpointGroups, err := handler.DataStore.EndpointGroup().EndpointGroups() + endpointGroups, err := handler.DataStore.EndpointGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) } diff --git a/api/http/handler/endpoints/endpoint_registries_list.go b/api/http/handler/endpoints/endpoint_registries_list.go index 2938e5c0f..d2a0b0421 100644 --- a/api/http/handler/endpoints/endpoint_registries_list.go +++ b/api/http/handler/endpoints/endpoint_registries_list.go @@ -31,7 +31,7 @@ func (handler *Handler) endpointRegistriesList(w http.ResponseWriter, r *http.Re return httperror.InternalServerError("Unable to retrieve info from request context", err) } - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return httperror.InternalServerError("Unable to retrieve user from the database", err) } @@ -50,7 +50,7 @@ func (handler *Handler) endpointRegistriesList(w http.ResponseWriter, r *http.Re isAdmin := securityContext.IsAdmin - registries, err := handler.DataStore.Registry().Registries() + registries, err := handler.DataStore.Registry().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve registries from the database", err) } diff --git a/api/http/handler/endpoints/endpoint_registry_access.go b/api/http/handler/endpoints/endpoint_registry_access.go index a3bc01c7e..7226fcf49 100644 --- a/api/http/handler/endpoints/endpoint_registry_access.go +++ b/api/http/handler/endpoints/endpoint_registry_access.go @@ -69,7 +69,7 @@ func (handler *Handler) endpointRegistryAccess(w http.ResponseWriter, r *http.Re return httperror.Forbidden("User is not authorized", err) } - registry, err := handler.DataStore.Registry().Registry(portainer.RegistryID(registryID)) + registry, err := handler.DataStore.Registry().Read(portainer.RegistryID(registryID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find an environment with the specified identifier inside the database", err) } else if err != nil { @@ -106,7 +106,7 @@ func (handler *Handler) endpointRegistryAccess(w http.ResponseWriter, r *http.Re registry.RegistryAccesses[portainer.EndpointID(endpointID)] = registryAccess - handler.DataStore.Registry().UpdateRegistry(registry.ID, registry) + handler.DataStore.Registry().Update(registry.ID, registry) return response.Empty(w) } diff --git a/api/http/handler/endpoints/filter.go b/api/http/handler/endpoints/filter.go index 17f3807a9..bf38560f1 100644 --- a/api/http/handler/endpoints/filter.go +++ b/api/http/handler/endpoints/filter.go @@ -176,7 +176,7 @@ func (handler *Handler) filterEndpointsByQuery(filteredEndpoints []portainer.End } if query.search != "" { - tags, err := handler.DataStore.Tag().Tags() + tags, err := handler.DataStore.Tag().ReadAll() if err != nil { return nil, 0, errors.WithMessage(err, "Unable to retrieve tags from the database") } @@ -244,7 +244,7 @@ func filterEndpointsByEdgeStack(endpoints []portainer.Endpoint, edgeStackId port envIds := make([]portainer.EndpointID, 0) for _, edgeGroupdId := range stack.EdgeGroups { - edgeGroup, err := datastore.EdgeGroup().EdgeGroup(edgeGroupdId) + edgeGroup, err := datastore.EdgeGroup().Read(edgeGroupdId) if err != nil { return nil, errors.WithMessage(err, "Unable to retrieve edge group from the database") } diff --git a/api/http/handler/endpoints/update_edge_relations.go b/api/http/handler/endpoints/update_edge_relations.go index 3a5ff40ec..23f6302d4 100644 --- a/api/http/handler/endpoints/update_edge_relations.go +++ b/api/http/handler/endpoints/update_edge_relations.go @@ -20,12 +20,12 @@ func (handler *Handler) updateEdgeRelations(tx dataservices.DataStoreTx, endpoin return errors.WithMessage(err, "Unable to find environment relation inside the database") } - endpointGroup, err := tx.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err := tx.EndpointGroup().Read(endpoint.GroupID) if err != nil { return errors.WithMessage(err, "Unable to find environment group inside the database") } - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return errors.WithMessage(err, "Unable to retrieve edge groups from the database") } diff --git a/api/http/handler/endpoints/utils_update_edge_groups.go b/api/http/handler/endpoints/utils_update_edge_groups.go index cec2e2481..764b738db 100644 --- a/api/http/handler/endpoints/utils_update_edge_groups.go +++ b/api/http/handler/endpoints/utils_update_edge_groups.go @@ -9,7 +9,7 @@ import ( ) func updateEnvironmentEdgeGroups(tx dataservices.DataStoreTx, newEdgeGroups []portainer.EdgeGroupID, environmentID portainer.EndpointID) (bool, error) { - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return false, errors.WithMessage(err, "Unable to retrieve edge groups from the database") } @@ -34,14 +34,14 @@ func updateEnvironmentEdgeGroups(tx dataservices.DataStoreTx, newEdgeGroups []po updateSet := func(groupIDs set.Set[portainer.EdgeGroupID], updateItem func(*portainer.EdgeGroup)) error { for groupID := range groupIDs { - group, err := tx.EdgeGroup().EdgeGroup(groupID) + group, err := tx.EdgeGroup().Read(groupID) if err != nil { return errors.WithMessage(err, "Unable to find a Edge group inside the database") } updateItem(group) - err = tx.EdgeGroup().UpdateEdgeGroup(groupID, group) + err = tx.EdgeGroup().Update(groupID, group) if err != nil { return errors.WithMessage(err, "Unable to persist Edge group changes inside the database") } diff --git a/api/http/handler/endpoints/utils_update_edge_groups_test.go b/api/http/handler/endpoints/utils_update_edge_groups_test.go index 7d4967797..8f34816a3 100644 --- a/api/http/handler/endpoints/utils_update_edge_groups_test.go +++ b/api/http/handler/endpoints/utils_update_edge_groups_test.go @@ -34,7 +34,7 @@ func Test_updateEdgeGroups(t *testing.T) { checkGroups := func(store *datastore.Store, is *assert.Assertions, groupIDs []portainer.EdgeGroupID, endpointID portainer.EndpointID) { for _, groupID := range groupIDs { - group, err := store.EdgeGroup().EdgeGroup(groupID) + group, err := store.EdgeGroup().Read(groupID) is.NoError(err) for _, endpoint := range group.Endpoints { @@ -83,7 +83,7 @@ func Test_updateEdgeGroups(t *testing.T) { for _, group := range endpointGroups { group.Endpoints = append(group.Endpoints, testCase.endpoint.ID) - err = store.EdgeGroup().UpdateEdgeGroup(group.ID, &group) + err = store.EdgeGroup().Update(group.ID, &group) is.NoError(err) } diff --git a/api/http/handler/endpoints/utils_update_tags.go b/api/http/handler/endpoints/utils_update_tags.go index 6166b4450..a792f32b9 100644 --- a/api/http/handler/endpoints/utils_update_tags.go +++ b/api/http/handler/endpoints/utils_update_tags.go @@ -20,14 +20,14 @@ func updateEnvironmentTags(tx dataservices.DataStoreTx, newTags []portainer.TagI updateSet := func(tagIDs set.Set[portainer.TagID], updateItem func(*portainer.Tag)) error { for tagID := range tagIDs { - tag, err := tx.Tag().Tag(tagID) + tag, err := tx.Tag().Read(tagID) if err != nil { return errors.WithMessage(err, "Unable to find a tag inside the database") } updateItem(tag) - err = tx.Tag().UpdateTag(tagID, tag) + err = tx.Tag().Update(tagID, tag) if err != nil { return errors.WithMessage(err, "Unable to persist tag changes inside the database") } diff --git a/api/http/handler/endpoints/utils_update_tags_test.go b/api/http/handler/endpoints/utils_update_tags_test.go index d36cc2aae..ee42e4e10 100644 --- a/api/http/handler/endpoints/utils_update_tags_test.go +++ b/api/http/handler/endpoints/utils_update_tags_test.go @@ -33,7 +33,7 @@ func Test_updateTags(t *testing.T) { checkTags := func(store *datastore.Store, is *assert.Assertions, tagIDs []portainer.TagID, endpointID portainer.EndpointID) { for _, tagID := range tagIDs { - tag, err := store.Tag().Tag(tagID) + tag, err := store.Tag().Read(tagID) is.NoError(err) _, ok := tag.Endpoints[endpointID] @@ -87,7 +87,7 @@ func Test_updateTags(t *testing.T) { for _, tag := range endpointTags { tag.Endpoints[testCase.endpoint.ID] = true - err = store.Tag().UpdateTag(tag.ID, &tag) + err = store.Tag().Update(tag.ID, &tag) is.NoError(err) } diff --git a/api/http/handler/helm/helm_install.go b/api/http/handler/helm/helm_install.go index 2a9aec456..232050345 100644 --- a/api/http/handler/helm/helm_install.go +++ b/api/http/handler/helm/helm_install.go @@ -151,7 +151,7 @@ func (handler *Handler) applyPortainerLabelsToHelmAppManifest(r *http.Request, i if err != nil { return nil, errors.Wrap(err, "unable to retrieve user details from authentication token") } - user, err := handler.dataStore.User().User(tokenData.ID) + user, err := handler.dataStore.User().Read(tokenData.ID) if err != nil { return nil, errors.Wrap(err, "unable to load user information from the database") } diff --git a/api/http/handler/hostmanagement/fdo/configure.go b/api/http/handler/hostmanagement/fdo/configure.go index 823788c17..e27d8e7a4 100644 --- a/api/http/handler/hostmanagement/fdo/configure.go +++ b/api/http/handler/hostmanagement/fdo/configure.go @@ -78,7 +78,7 @@ func (handler *Handler) fdoConfigureDevice(w http.ResponseWriter, r *http.Reques return httperror.BadRequest("Invalid request payload", err) } - profile, err := handler.DataStore.FDOProfile().FDOProfile(portainer.FDOProfileID(payload.ProfileID)) + profile, err := handler.DataStore.FDOProfile().Read(portainer.FDOProfileID(payload.ProfileID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a FDO Profile with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/hostmanagement/fdo/fdo.go b/api/http/handler/hostmanagement/fdo/fdo.go index 69851f454..c3106cece 100644 --- a/api/http/handler/hostmanagement/fdo/fdo.go +++ b/api/http/handler/hostmanagement/fdo/fdo.go @@ -99,7 +99,7 @@ func (handler *Handler) fdoConfigure(w http.ResponseWriter, r *http.Request) *ht return httperror.BadRequest("Error saving FDO settings", err) } - profiles, err := handler.DataStore.FDOProfile().FDOProfiles() + profiles, err := handler.DataStore.FDOProfile().ReadAll() if err != nil { return httperror.InternalServerError("Error saving FDO settings", err) } diff --git a/api/http/handler/hostmanagement/fdo/profile_duplicate.go b/api/http/handler/hostmanagement/fdo/profile_duplicate.go index 35f7a4231..9485e9342 100644 --- a/api/http/handler/hostmanagement/fdo/profile_duplicate.go +++ b/api/http/handler/hostmanagement/fdo/profile_duplicate.go @@ -31,7 +31,7 @@ func (handler *Handler) duplicateProfile(w http.ResponseWriter, r *http.Request) return httperror.BadRequest("Bad request", errors.New("missing 'id' query parameter")) } - originalProfile, err := handler.DataStore.FDOProfile().FDOProfile(portainer.FDOProfileID(id)) + originalProfile, err := handler.DataStore.FDOProfile().Read(portainer.FDOProfileID(id)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a FDO Profile with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/hostmanagement/fdo/profile_inspect.go b/api/http/handler/hostmanagement/fdo/profile_inspect.go index 00187f7e7..5c88341fb 100644 --- a/api/http/handler/hostmanagement/fdo/profile_inspect.go +++ b/api/http/handler/hostmanagement/fdo/profile_inspect.go @@ -33,7 +33,7 @@ func (handler *Handler) fdoProfileInspect(w http.ResponseWriter, r *http.Request return httperror.BadRequest("Bad request", errors.New("missing 'id' query parameter")) } - profile, err := handler.DataStore.FDOProfile().FDOProfile(portainer.FDOProfileID(id)) + profile, err := handler.DataStore.FDOProfile().Read(portainer.FDOProfileID(id)) if err != nil { return httperror.InternalServerError("Unable to retrieve Profile", err) } diff --git a/api/http/handler/hostmanagement/fdo/profile_list.go b/api/http/handler/hostmanagement/fdo/profile_list.go index 2e190a9c9..c122ce27c 100644 --- a/api/http/handler/hostmanagement/fdo/profile_list.go +++ b/api/http/handler/hostmanagement/fdo/profile_list.go @@ -22,7 +22,7 @@ import ( // @router /fdo/profiles [get] func (handler *Handler) fdoProfileList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - profiles, err := handler.DataStore.FDOProfile().FDOProfiles() + profiles, err := handler.DataStore.FDOProfile().ReadAll() if err != nil { return httperror.InternalServerError(err.Error(), err) } diff --git a/api/http/handler/hostmanagement/fdo/profile_update.go b/api/http/handler/hostmanagement/fdo/profile_update.go index 9c5367be9..77a86a3ea 100644 --- a/api/http/handler/hostmanagement/fdo/profile_update.go +++ b/api/http/handler/hostmanagement/fdo/profile_update.go @@ -37,7 +37,7 @@ func (handler *Handler) updateProfile(w http.ResponseWriter, r *http.Request) *h return httperror.BadRequest("Invalid request payload", err) } - profile, err := handler.DataStore.FDOProfile().FDOProfile(portainer.FDOProfileID(id)) + profile, err := handler.DataStore.FDOProfile().Read(portainer.FDOProfileID(id)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a FDO Profile with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/hostmanagement/fdo/utils.go b/api/http/handler/hostmanagement/fdo/utils.go index 410ca009f..665a904bd 100644 --- a/api/http/handler/hostmanagement/fdo/utils.go +++ b/api/http/handler/hostmanagement/fdo/utils.go @@ -1,7 +1,7 @@ package fdo func (handler *Handler) checkUniqueProfileName(name string, id int) (bool, error) { - profiles, err := handler.DataStore.FDOProfile().FDOProfiles() + profiles, err := handler.DataStore.FDOProfile().ReadAll() if err != nil { return false, err } diff --git a/api/http/handler/kubernetes/config.go b/api/http/handler/kubernetes/config.go index 32a1aa8eb..65444766e 100644 --- a/api/http/handler/kubernetes/config.go +++ b/api/http/handler/kubernetes/config.go @@ -75,7 +75,7 @@ func (handler *Handler) filterUserKubeEndpoints(r *http.Request) ([]portainer.En return nil, httperror.InternalServerError("Unable to retrieve info from request context", err) } - endpointGroups, err := handler.DataStore.EndpointGroup().EndpointGroups() + endpointGroups, err := handler.DataStore.EndpointGroup().ReadAll() if err != nil { return nil, httperror.InternalServerError("Unable to retrieve environment groups from the database", err) } diff --git a/api/http/handler/registries/registry_configure.go b/api/http/handler/registries/registry_configure.go index a1074eeb5..717512459 100644 --- a/api/http/handler/registries/registry_configure.go +++ b/api/http/handler/registries/registry_configure.go @@ -118,7 +118,7 @@ func (handler *Handler) registryConfigure(w http.ResponseWriter, r *http.Request return httperror.BadRequest("Invalid registry identifier route variable", err) } - registry, err := handler.DataStore.Registry().Registry(portainer.RegistryID(registryID)) + registry, err := handler.DataStore.Registry().Read(portainer.RegistryID(registryID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a registry with the specified identifier inside the database", err) } else if err != nil { @@ -172,7 +172,7 @@ func (handler *Handler) registryConfigure(w http.ResponseWriter, r *http.Request registry.ManagementConfiguration = syncConfig(registry) registry.ManagementConfiguration.TLSConfig = tlsConfig - err = handler.DataStore.Registry().UpdateRegistry(registry.ID, registry) + err = handler.DataStore.Registry().Update(registry.ID, registry) if err != nil { return httperror.InternalServerError("Unable to persist registry changes inside the database", err) } diff --git a/api/http/handler/registries/registry_create.go b/api/http/handler/registries/registry_create.go index 124e0795f..4d6dcb4ca 100644 --- a/api/http/handler/registries/registry_create.go +++ b/api/http/handler/registries/registry_create.go @@ -121,7 +121,7 @@ func (handler *Handler) registryCreate(w http.ResponseWriter, r *http.Request) * registry.ManagementConfiguration = syncConfig(registry) - registries, err := handler.DataStore.Registry().Registries() + registries, err := handler.DataStore.Registry().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve registries from the database", err) } diff --git a/api/http/handler/registries/registry_delete.go b/api/http/handler/registries/registry_delete.go index 62088b189..8b75441ff 100644 --- a/api/http/handler/registries/registry_delete.go +++ b/api/http/handler/registries/registry_delete.go @@ -38,14 +38,14 @@ func (handler *Handler) registryDelete(w http.ResponseWriter, r *http.Request) * return httperror.BadRequest("Invalid registry identifier route variable", err) } - _, err = handler.DataStore.Registry().Registry(portainer.RegistryID(registryID)) + _, err = handler.DataStore.Registry().Read(portainer.RegistryID(registryID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a registry with the specified identifier inside the database", err) } else if err != nil { return httperror.InternalServerError("Unable to find a registry with the specified identifier inside the database", err) } - err = handler.DataStore.Registry().DeleteRegistry(portainer.RegistryID(registryID)) + err = handler.DataStore.Registry().Delete(portainer.RegistryID(registryID)) if err != nil { return httperror.InternalServerError("Unable to remove the registry from the database", err) } diff --git a/api/http/handler/registries/registry_inspect.go b/api/http/handler/registries/registry_inspect.go index d100d4d1d..e2b3cb79f 100644 --- a/api/http/handler/registries/registry_inspect.go +++ b/api/http/handler/registries/registry_inspect.go @@ -40,7 +40,7 @@ func (handler *Handler) registryInspect(w http.ResponseWriter, r *http.Request) return httperror.BadRequest("Invalid registry identifier route variable", err) } - registry, err := handler.DataStore.Registry().Registry(portainer.RegistryID(registryID)) + registry, err := handler.DataStore.Registry().Read(portainer.RegistryID(registryID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a registry with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/registries/registry_list.go b/api/http/handler/registries/registry_list.go index 31218e8a2..a76a58595 100644 --- a/api/http/handler/registries/registry_list.go +++ b/api/http/handler/registries/registry_list.go @@ -31,7 +31,7 @@ func (handler *Handler) registryList(w http.ResponseWriter, r *http.Request) *ht return httperror.Forbidden("Permission denied to list registries, use /endpoints/:endpointId/registries route instead", httperrors.ErrResourceAccessDenied) } - registries, err := handler.DataStore.Registry().Registries() + registries, err := handler.DataStore.Registry().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve registries from the database", err) } diff --git a/api/http/handler/registries/registry_update.go b/api/http/handler/registries/registry_update.go index efe36987c..2de80eac6 100644 --- a/api/http/handler/registries/registry_update.go +++ b/api/http/handler/registries/registry_update.go @@ -71,14 +71,14 @@ func (handler *Handler) registryUpdate(w http.ResponseWriter, r *http.Request) * return httperror.BadRequest("Invalid registry identifier route variable", err) } - registry, err := handler.DataStore.Registry().Registry(portainer.RegistryID(registryID)) + registry, err := handler.DataStore.Registry().Read(portainer.RegistryID(registryID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a registry with the specified identifier inside the database", err) } else if err != nil { return httperror.InternalServerError("Unable to find a registry with the specified identifier inside the database", err) } - registries, err := handler.DataStore.Registry().Registries() + registries, err := handler.DataStore.Registry().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve registries from the database", err) } @@ -177,7 +177,7 @@ func (handler *Handler) registryUpdate(w http.ResponseWriter, r *http.Request) * registry.Quay = *payload.Quay } - err = handler.DataStore.Registry().UpdateRegistry(registry.ID, registry) + err = handler.DataStore.Registry().Update(registry.ID, registry) if err != nil { return httperror.InternalServerError("Unable to persist registry changes inside the database", err) } diff --git a/api/http/handler/resourcecontrols/resourcecontrol_delete.go b/api/http/handler/resourcecontrols/resourcecontrol_delete.go index c0922ed44..da6141ade 100644 --- a/api/http/handler/resourcecontrols/resourcecontrol_delete.go +++ b/api/http/handler/resourcecontrols/resourcecontrol_delete.go @@ -28,14 +28,14 @@ func (handler *Handler) resourceControlDelete(w http.ResponseWriter, r *http.Req return httperror.BadRequest("Invalid resource control identifier route variable", err) } - _, err = handler.DataStore.ResourceControl().ResourceControl(portainer.ResourceControlID(resourceControlID)) + _, err = handler.DataStore.ResourceControl().Read(portainer.ResourceControlID(resourceControlID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a resource control with the specified identifier inside the database", err) } else if err != nil { return httperror.InternalServerError("Unable to find a resource control with with the specified identifier inside the database", err) } - err = handler.DataStore.ResourceControl().DeleteResourceControl(portainer.ResourceControlID(resourceControlID)) + err = handler.DataStore.ResourceControl().Delete(portainer.ResourceControlID(resourceControlID)) if err != nil { return httperror.InternalServerError("Unable to remove the resource control from the database", err) } diff --git a/api/http/handler/resourcecontrols/resourcecontrol_update.go b/api/http/handler/resourcecontrols/resourcecontrol_update.go index c2dd3c0bf..1a99dee02 100644 --- a/api/http/handler/resourcecontrols/resourcecontrol_update.go +++ b/api/http/handler/resourcecontrols/resourcecontrol_update.go @@ -63,7 +63,7 @@ func (handler *Handler) resourceControlUpdate(w http.ResponseWriter, r *http.Req return httperror.BadRequest("Invalid request payload", err) } - resourceControl, err := handler.DataStore.ResourceControl().ResourceControl(portainer.ResourceControlID(resourceControlID)) + resourceControl, err := handler.DataStore.ResourceControl().Read(portainer.ResourceControlID(resourceControlID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a resource control with the specified identifier inside the database", err) } else if err != nil { @@ -106,7 +106,7 @@ func (handler *Handler) resourceControlUpdate(w http.ResponseWriter, r *http.Req return httperror.Forbidden("Permission denied to update the resource control", httperrors.ErrResourceAccessDenied) } - err = handler.DataStore.ResourceControl().UpdateResourceControl(resourceControl.ID, resourceControl) + err = handler.DataStore.ResourceControl().Update(resourceControl.ID, resourceControl) if err != nil { return httperror.InternalServerError("Unable to persist resource control changes inside the database", err) } diff --git a/api/http/handler/roles/role_list.go b/api/http/handler/roles/role_list.go index f94ac001c..4900d4e19 100644 --- a/api/http/handler/roles/role_list.go +++ b/api/http/handler/roles/role_list.go @@ -19,7 +19,7 @@ import ( // @failure 500 "Server error" // @router /roles [get] func (handler *Handler) roleList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - roles, err := handler.DataStore.Role().Roles() + roles, err := handler.DataStore.Role().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve authorization sets from the database", err) } diff --git a/api/http/handler/stacks/create_compose_stack.go b/api/http/handler/stacks/create_compose_stack.go index 8c695c209..93d4bfdc3 100644 --- a/api/http/handler/stacks/create_compose_stack.go +++ b/api/http/handler/stacks/create_compose_stack.go @@ -61,13 +61,13 @@ func (handler *Handler) checkAndCleanStackDupFromSwarm(w http.ResponseWriter, r deployments.StopAutoupdate(stack.ID, stack.AutoUpdate.JobID, handler.Scheduler) } - err = handler.DataStore.Stack().DeleteStack(stack.ID) + err = handler.DataStore.Stack().Delete(stack.ID) if err != nil { return err } if resourceControl != nil { - err = handler.DataStore.ResourceControl().DeleteResourceControl(resourceControl.ID) + err = handler.DataStore.ResourceControl().Delete(resourceControl.ID) if err != nil { log.Error(). Str("stack", fmt.Sprintf("%+v", stack)). diff --git a/api/http/handler/stacks/create_kubernetes_stack.go b/api/http/handler/stacks/create_kubernetes_stack.go index 490ad7988..c609b7030 100644 --- a/api/http/handler/stacks/create_kubernetes_stack.go +++ b/api/http/handler/stacks/create_kubernetes_stack.go @@ -156,7 +156,7 @@ func (handler *Handler) createKubernetesStackFromFileContent(w http.ResponseWrit return httperror.BadRequest("Invalid request payload", err) } - user, err := handler.DataStore.User().User(userID) + user, err := handler.DataStore.User().Read(userID) if err != nil { return httperror.InternalServerError("Unable to load user information from the database", err) } @@ -213,7 +213,7 @@ func (handler *Handler) createKubernetesStackFromGitRepository(w http.ResponseWr return httperror.BadRequest("Invalid request payload", err) } - user, err := handler.DataStore.User().User(userID) + user, err := handler.DataStore.User().Read(userID) if err != nil { return httperror.InternalServerError("Unable to load user information from the database", err) } @@ -291,7 +291,7 @@ func (handler *Handler) createKubernetesStackFromManifestURL(w http.ResponseWrit return httperror.BadRequest("Invalid request payload", err) } - user, err := handler.DataStore.User().User(userID) + user, err := handler.DataStore.User().Read(userID) if err != nil { return httperror.InternalServerError("Unable to load user information from the database", err) } diff --git a/api/http/handler/stacks/handler.go b/api/http/handler/stacks/handler.go index b0afb010d..0f8edd43f 100644 --- a/api/http/handler/stacks/handler.go +++ b/api/http/handler/stacks/handler.go @@ -87,7 +87,7 @@ func NewHandler(bouncer security.BouncerService) *Handler { } func (handler *Handler) userCanAccessStack(securityContext *security.RestrictedRequestContext, endpointID portainer.EndpointID, resourceControl *portainer.ResourceControl) (bool, error) { - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return false, err } @@ -105,7 +105,7 @@ func (handler *Handler) userCanAccessStack(securityContext *security.RestrictedR } func (handler *Handler) userIsAdmin(userID portainer.UserID) (bool, error) { - user, err := handler.DataStore.User().User(userID) + user, err := handler.DataStore.User().Read(userID) if err != nil { return false, err } @@ -116,7 +116,7 @@ func (handler *Handler) userIsAdmin(userID portainer.UserID) (bool, error) { } func (handler *Handler) userCanCreateStack(securityContext *security.RestrictedRequestContext, endpointID portainer.EndpointID) (bool, error) { - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return false, err } @@ -145,7 +145,7 @@ func (handler *Handler) userCanManageStacks(securityContext *security.Restricted } func (handler *Handler) checkUniqueStackName(endpoint *portainer.Endpoint, name string, stackID portainer.StackID) (bool, error) { - stacks, err := handler.DataStore.Stack().Stacks() + stacks, err := handler.DataStore.Stack().ReadAll() if err != nil { return false, err } diff --git a/api/http/handler/stacks/stack_associate.go b/api/http/handler/stacks/stack_associate.go index 96a2b8144..14cfd0553 100644 --- a/api/http/handler/stacks/stack_associate.go +++ b/api/http/handler/stacks/stack_associate.go @@ -56,12 +56,12 @@ func (handler *Handler) stackAssociate(w http.ResponseWriter, r *http.Request) * return httperror.InternalServerError("Unable to retrieve info from request context", err) } - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return httperror.InternalServerError("Unable to load user information from the database", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -76,7 +76,7 @@ func (handler *Handler) stackAssociate(w http.ResponseWriter, r *http.Request) * if resourceControl != nil { resourceControl.ResourceID = fmt.Sprintf("%d_%s", endpointID, stack.Name) - err = handler.DataStore.ResourceControl().UpdateResourceControl(resourceControl.ID, resourceControl) + err = handler.DataStore.ResourceControl().Update(resourceControl.ID, resourceControl) if err != nil { return httperror.InternalServerError("Unable to persist resource control changes inside the database", err) } @@ -112,7 +112,7 @@ func (handler *Handler) stackAssociate(w http.ResponseWriter, r *http.Request) * stack.UpdateDate = 0 stack.UpdatedBy = "" - err = handler.DataStore.Stack().UpdateStack(stack.ID, stack) + err = handler.DataStore.Stack().Update(stack.ID, stack) if err != nil { return httperror.InternalServerError("Unable to persist the stack changes inside the database", err) } diff --git a/api/http/handler/stacks/stack_delete.go b/api/http/handler/stacks/stack_delete.go index 805d7a949..840af0c72 100644 --- a/api/http/handler/stacks/stack_delete.go +++ b/api/http/handler/stacks/stack_delete.go @@ -57,7 +57,7 @@ func (handler *Handler) stackDelete(w http.ResponseWriter, r *http.Request) *htt return httperror.BadRequest("Invalid stack identifier route variable", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(id)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(id)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -123,13 +123,13 @@ func (handler *Handler) stackDelete(w http.ResponseWriter, r *http.Request) *htt return httperror.InternalServerError(err.Error(), err) } - err = handler.DataStore.Stack().DeleteStack(portainer.StackID(id)) + err = handler.DataStore.Stack().Delete(portainer.StackID(id)) if err != nil { return httperror.InternalServerError("Unable to remove the stack from the database", err) } if resourceControl != nil { - err = handler.DataStore.ResourceControl().DeleteResourceControl(resourceControl.ID) + err = handler.DataStore.ResourceControl().Delete(resourceControl.ID) if err != nil { return httperror.InternalServerError("Unable to remove the associated resource control from the database", err) } diff --git a/api/http/handler/stacks/stack_file.go b/api/http/handler/stacks/stack_file.go index 475fcd6d5..19dbbab5e 100644 --- a/api/http/handler/stacks/stack_file.go +++ b/api/http/handler/stacks/stack_file.go @@ -39,7 +39,7 @@ func (handler *Handler) stackFile(w http.ResponseWriter, r *http.Request) *httpe return httperror.BadRequest("Invalid stack identifier route variable", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/stacks/stack_inspect.go b/api/http/handler/stacks/stack_inspect.go index fae1dfe34..0662636e0 100644 --- a/api/http/handler/stacks/stack_inspect.go +++ b/api/http/handler/stacks/stack_inspect.go @@ -34,7 +34,7 @@ func (handler *Handler) stackInspect(w http.ResponseWriter, r *http.Request) *ht return httperror.BadRequest("Invalid stack identifier route variable", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/stacks/stack_list.go b/api/http/handler/stacks/stack_list.go index 24ab99bfb..99f55e8ef 100644 --- a/api/http/handler/stacks/stack_list.go +++ b/api/http/handler/stacks/stack_list.go @@ -46,13 +46,13 @@ func (handler *Handler) stackList(w http.ResponseWriter, r *http.Request) *httpe return httperror.InternalServerError("Unable to retrieve environments from database", err) } - stacks, err := handler.DataStore.Stack().Stacks() + stacks, err := handler.DataStore.Stack().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve stacks from the database", err) } stacks = filterStacks(stacks, &filters, endpoints) - resourceControls, err := handler.DataStore.ResourceControl().ResourceControls() + resourceControls, err := handler.DataStore.ResourceControl().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve resource controls from the database", err) } @@ -69,7 +69,7 @@ func (handler *Handler) stackList(w http.ResponseWriter, r *http.Request) *httpe return httperror.Forbidden("Permission denied to access orphaned stacks", httperrors.ErrUnauthorized) } - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return httperror.InternalServerError("Unable to retrieve user information from the database", err) } diff --git a/api/http/handler/stacks/stack_migrate.go b/api/http/handler/stacks/stack_migrate.go index 687b69894..6657e88ce 100644 --- a/api/http/handler/stacks/stack_migrate.go +++ b/api/http/handler/stacks/stack_migrate.go @@ -60,7 +60,7 @@ func (handler *Handler) stackMigrate(w http.ResponseWriter, r *http.Request) *ht return httperror.BadRequest("Invalid request payload", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -161,14 +161,14 @@ func (handler *Handler) stackMigrate(w http.ResponseWriter, r *http.Request) *ht } stack.Name = newName - err = handler.DataStore.Stack().UpdateStack(stack.ID, stack) + err = handler.DataStore.Stack().Update(stack.ID, stack) if err != nil { return httperror.InternalServerError("Unable to persist the stack changes inside the database", err) } if resourceControl != nil { resourceControl.ResourceID = stackutils.ResourceControlID(stack.EndpointID, stack.Name) - err := handler.DataStore.ResourceControl().UpdateResourceControl(resourceControl.ID, resourceControl) + err := handler.DataStore.ResourceControl().Update(resourceControl.ID, resourceControl) if err != nil { return httperror.InternalServerError("Unable to persist the resource control changes", err) } diff --git a/api/http/handler/stacks/stack_start.go b/api/http/handler/stacks/stack_start.go index d171f6d6c..44a9fca09 100644 --- a/api/http/handler/stacks/stack_start.go +++ b/api/http/handler/stacks/stack_start.go @@ -43,7 +43,7 @@ func (handler *Handler) stackStart(w http.ResponseWriter, r *http.Request) *http return httperror.InternalServerError("Unable to retrieve info from request context", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -123,7 +123,7 @@ func (handler *Handler) stackStart(w http.ResponseWriter, r *http.Request) *http } stack.Status = portainer.StackStatusActive - err = handler.DataStore.Stack().UpdateStack(stack.ID, stack) + err = handler.DataStore.Stack().Update(stack.ID, stack) if err != nil { return httperror.InternalServerError("Unable to update stack status", err) } diff --git a/api/http/handler/stacks/stack_stop.go b/api/http/handler/stacks/stack_stop.go index 6097c1e74..e395dc18e 100644 --- a/api/http/handler/stacks/stack_stop.go +++ b/api/http/handler/stacks/stack_stop.go @@ -41,7 +41,7 @@ func (handler *Handler) stackStop(w http.ResponseWriter, r *http.Request) *httpe return httperror.InternalServerError("Unable to retrieve info from request context", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -107,7 +107,7 @@ func (handler *Handler) stackStop(w http.ResponseWriter, r *http.Request) *httpe } stack.Status = portainer.StackStatusInactive - err = handler.DataStore.Stack().UpdateStack(stack.ID, stack) + err = handler.DataStore.Stack().Update(stack.ID, stack) if err != nil { return httperror.InternalServerError("Unable to update stack status", err) } diff --git a/api/http/handler/stacks/stack_update.go b/api/http/handler/stacks/stack_update.go index 0dc3f25dc..528d62864 100644 --- a/api/http/handler/stacks/stack_update.go +++ b/api/http/handler/stacks/stack_update.go @@ -77,7 +77,7 @@ func (handler *Handler) stackUpdate(w http.ResponseWriter, r *http.Request) *htt return httperror.BadRequest("Invalid stack identifier route variable", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -143,7 +143,7 @@ func (handler *Handler) stackUpdate(w http.ResponseWriter, r *http.Request) *htt return updateError } - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return httperror.BadRequest("Cannot find context user", errors.Wrap(err, "failed to fetch the user")) } @@ -151,7 +151,7 @@ func (handler *Handler) stackUpdate(w http.ResponseWriter, r *http.Request) *htt stack.UpdateDate = time.Now().Unix() stack.Status = portainer.StackStatusActive - err = handler.DataStore.Stack().UpdateStack(stack.ID, stack) + err = handler.DataStore.Stack().Update(stack.ID, stack) if err != nil { return httperror.InternalServerError("Unable to persist the stack changes inside the database", err) } diff --git a/api/http/handler/stacks/stack_update_git.go b/api/http/handler/stacks/stack_update_git.go index 3ccbb7633..d9a81ccdf 100644 --- a/api/http/handler/stacks/stack_update_git.go +++ b/api/http/handler/stacks/stack_update_git.go @@ -65,7 +65,7 @@ func (handler *Handler) stackUpdateGit(w http.ResponseWriter, r *http.Request) * return httperror.BadRequest("Invalid request payload", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -103,7 +103,7 @@ func (handler *Handler) stackUpdateGit(w http.ResponseWriter, r *http.Request) * return httperror.InternalServerError("Unable to retrieve info from request context", err) } - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return httperror.BadRequest("Cannot find context user", errors.Wrap(err, "failed to fetch the user")) } @@ -181,7 +181,7 @@ func (handler *Handler) stackUpdateGit(w http.ResponseWriter, r *http.Request) * } //save the updated stack to DB - err = handler.DataStore.Stack().UpdateStack(stack.ID, stack) + err = handler.DataStore.Stack().Update(stack.ID, stack) if err != nil { return httperror.InternalServerError("Unable to persist the stack changes inside the database", err) } diff --git a/api/http/handler/stacks/stack_update_git_redeploy.go b/api/http/handler/stacks/stack_update_git_redeploy.go index b30085156..7cf9be69c 100644 --- a/api/http/handler/stacks/stack_update_git_redeploy.go +++ b/api/http/handler/stacks/stack_update_git_redeploy.go @@ -56,7 +56,7 @@ func (handler *Handler) stackGitRedeploy(w http.ResponseWriter, r *http.Request) return httperror.BadRequest("Invalid stack identifier route variable", err) } - stack, err := handler.DataStore.Stack().Stack(portainer.StackID(stackID)) + stack, err := handler.DataStore.Stack().Read(portainer.StackID(stackID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a stack with the specified identifier inside the database", err) } else if err != nil { @@ -175,7 +175,7 @@ func (handler *Handler) stackGitRedeploy(w http.ResponseWriter, r *http.Request) } stack.GitConfig.ConfigHash = newHash - user, err := handler.DataStore.User().User(securityContext.UserID) + user, err := handler.DataStore.User().Read(securityContext.UserID) if err != nil { return httperror.BadRequest("Cannot find context user", errors.Wrap(err, "failed to fetch the user")) } @@ -183,7 +183,7 @@ func (handler *Handler) stackGitRedeploy(w http.ResponseWriter, r *http.Request) stack.UpdateDate = time.Now().Unix() stack.Status = portainer.StackStatusActive - err = handler.DataStore.Stack().UpdateStack(stack.ID, stack) + err = handler.DataStore.Stack().Update(stack.ID, stack) if err != nil { return httperror.InternalServerError("Unable to persist the stack changes inside the database", errors.Wrap(err, "failed to update the stack")) } diff --git a/api/http/handler/tags/tag_create.go b/api/http/handler/tags/tag_create.go index a4ece0e49..5e4675291 100644 --- a/api/http/handler/tags/tag_create.go +++ b/api/http/handler/tags/tag_create.go @@ -59,7 +59,7 @@ func (handler *Handler) tagCreate(w http.ResponseWriter, r *http.Request) *httpe } func createTag(tx dataservices.DataStoreTx, payload tagCreatePayload) (*portainer.Tag, error) { - tags, err := tx.Tag().Tags() + tags, err := tx.Tag().ReadAll() if err != nil { return nil, httperror.InternalServerError("Unable to retrieve tags from the database", err) } diff --git a/api/http/handler/tags/tag_delete.go b/api/http/handler/tags/tag_delete.go index 48dffec92..c2648b69a 100644 --- a/api/http/handler/tags/tag_delete.go +++ b/api/http/handler/tags/tag_delete.go @@ -54,7 +54,7 @@ func (handler *Handler) tagDelete(w http.ResponseWriter, r *http.Request) *httpe } func deleteTag(tx dataservices.DataStoreTx, tagID portainer.TagID) error { - tag, err := tx.Tag().Tag(tagID) + tag, err := tx.Tag().Read(tagID) if tx.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a tag with the specified identifier inside the database", err) } else if err != nil { @@ -75,13 +75,13 @@ func deleteTag(tx dataservices.DataStoreTx, tagID portainer.TagID) error { } for endpointGroupID := range tag.EndpointGroups { - endpointGroup, err := tx.EndpointGroup().EndpointGroup(endpointGroupID) + endpointGroup, err := tx.EndpointGroup().Read(endpointGroupID) if err != nil { return httperror.InternalServerError("Unable to retrieve environment group from the database", err) } endpointGroup.TagIDs = removeElement(endpointGroup.TagIDs, tagID) - err = tx.EndpointGroup().UpdateEndpointGroup(endpointGroup.ID, endpointGroup) + err = tx.EndpointGroup().Update(endpointGroup.ID, endpointGroup) if err != nil { return httperror.InternalServerError("Unable to update environment group", err) } @@ -92,7 +92,7 @@ func deleteTag(tx dataservices.DataStoreTx, tagID portainer.TagID) error { return httperror.InternalServerError("Unable to retrieve environments from the database", err) } - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve edge groups from the database", err) } @@ -124,14 +124,14 @@ func deleteTag(tx dataservices.DataStoreTx, tagID portainer.TagID) error { for _, edgeGroup := range edgeGroups { edgeGroup.TagIDs = removeElement(edgeGroup.TagIDs, tagID) - err = tx.EdgeGroup().UpdateEdgeGroup(edgeGroup.ID, &edgeGroup) + err = tx.EdgeGroup().Update(edgeGroup.ID, &edgeGroup) if err != nil { return httperror.InternalServerError("Unable to update edge group", err) } } } - err = tx.Tag().DeleteTag(tagID) + err = tx.Tag().Delete(tagID) if err != nil { return httperror.InternalServerError("Unable to remove the tag from the database", err) } @@ -145,7 +145,7 @@ func updateEndpointRelations(tx dataservices.DataStoreTx, endpoint portainer.End return err } - endpointGroup, err := tx.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err := tx.EndpointGroup().Read(endpoint.GroupID) if err != nil { return err } diff --git a/api/http/handler/tags/tag_delete_test.go b/api/http/handler/tags/tag_delete_test.go index 7dea1a87a..9f5e80e4c 100644 --- a/api/http/handler/tags/tag_delete_test.go +++ b/api/http/handler/tags/tag_delete_test.go @@ -77,7 +77,7 @@ func TestTagDeleteEdgeGroupsConcurrently(t *testing.T) { // Check that the edge group is consistent - edgeGroup, err := handler.DataStore.EdgeGroup().EdgeGroup(1) + edgeGroup, err := handler.DataStore.EdgeGroup().Read(1) if err != nil { t.Fatal("could not retrieve the edge group:", err) } diff --git a/api/http/handler/tags/tag_list.go b/api/http/handler/tags/tag_list.go index c2c24a737..a53d0ad20 100644 --- a/api/http/handler/tags/tag_list.go +++ b/api/http/handler/tags/tag_list.go @@ -19,7 +19,7 @@ import ( // @failure 500 "Server error" // @router /tags [get] func (handler *Handler) tagList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - tags, err := handler.DataStore.Tag().Tags() + tags, err := handler.DataStore.Tag().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve tags from the database", err) } diff --git a/api/http/handler/teammemberships/teammembership_delete.go b/api/http/handler/teammemberships/teammembership_delete.go index a398c983e..e945aec56 100644 --- a/api/http/handler/teammemberships/teammembership_delete.go +++ b/api/http/handler/teammemberships/teammembership_delete.go @@ -31,7 +31,7 @@ func (handler *Handler) teamMembershipDelete(w http.ResponseWriter, r *http.Requ return httperror.BadRequest("Invalid membership identifier route variable", err) } - membership, err := handler.DataStore.TeamMembership().TeamMembership(portainer.TeamMembershipID(membershipID)) + membership, err := handler.DataStore.TeamMembership().Read(portainer.TeamMembershipID(membershipID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a team membership with the specified identifier inside the database", err) } else if err != nil { @@ -47,7 +47,7 @@ func (handler *Handler) teamMembershipDelete(w http.ResponseWriter, r *http.Requ return httperror.Forbidden("Permission denied to delete the membership", errors.ErrResourceAccessDenied) } - err = handler.DataStore.TeamMembership().DeleteTeamMembership(portainer.TeamMembershipID(membershipID)) + err = handler.DataStore.TeamMembership().Delete(portainer.TeamMembershipID(membershipID)) if err != nil { return httperror.InternalServerError("Unable to remove the team membership from the database", err) } diff --git a/api/http/handler/teammemberships/teammembership_list.go b/api/http/handler/teammemberships/teammembership_list.go index 7ed32a354..1c0f11fc3 100644 --- a/api/http/handler/teammemberships/teammembership_list.go +++ b/api/http/handler/teammemberships/teammembership_list.go @@ -21,7 +21,7 @@ import ( // @failure 500 "Server error" // @router /team_memberships [get] func (handler *Handler) teamMembershipList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - memberships, err := handler.DataStore.TeamMembership().TeamMemberships() + memberships, err := handler.DataStore.TeamMembership().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve team memberships from the database", err) } diff --git a/api/http/handler/teammemberships/teammembership_update.go b/api/http/handler/teammemberships/teammembership_update.go index 09d77d642..b5da6f2cc 100644 --- a/api/http/handler/teammemberships/teammembership_update.go +++ b/api/http/handler/teammemberships/teammembership_update.go @@ -63,7 +63,7 @@ func (handler *Handler) teamMembershipUpdate(w http.ResponseWriter, r *http.Requ return httperror.BadRequest("Invalid request payload", err) } - membership, err := handler.DataStore.TeamMembership().TeamMembership(portainer.TeamMembershipID(membershipID)) + membership, err := handler.DataStore.TeamMembership().Read(portainer.TeamMembershipID(membershipID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a team membership with the specified identifier inside the database", err) } else if err != nil { @@ -85,7 +85,7 @@ func (handler *Handler) teamMembershipUpdate(w http.ResponseWriter, r *http.Requ membership.TeamID = portainer.TeamID(payload.TeamID) membership.Role = portainer.MembershipRole(payload.Role) - err = handler.DataStore.TeamMembership().UpdateTeamMembership(membership.ID, membership) + err = handler.DataStore.TeamMembership().Update(membership.ID, membership) if err != nil { return httperror.InternalServerError("Unable to persist membership changes inside the database", err) } diff --git a/api/http/handler/teams/team_delete.go b/api/http/handler/teams/team_delete.go index 294d69ae4..52e66b030 100644 --- a/api/http/handler/teams/team_delete.go +++ b/api/http/handler/teams/team_delete.go @@ -30,14 +30,14 @@ func (handler *Handler) teamDelete(w http.ResponseWriter, r *http.Request) *http return httperror.BadRequest("Invalid team identifier route variable", err) } - _, err = handler.DataStore.Team().Team(portainer.TeamID(teamID)) + _, err = handler.DataStore.Team().Read(portainer.TeamID(teamID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a team with the specified identifier inside the database", err) } else if err != nil { return httperror.InternalServerError("Unable to find a team with the specified identifier inside the database", err) } - err = handler.DataStore.Team().DeleteTeam(portainer.TeamID(teamID)) + err = handler.DataStore.Team().Delete(portainer.TeamID(teamID)) if err != nil { return httperror.InternalServerError("Unable to delete the team from the database", err) } diff --git a/api/http/handler/teams/team_inspect.go b/api/http/handler/teams/team_inspect.go index d94bbc9fd..a037b2a37 100644 --- a/api/http/handler/teams/team_inspect.go +++ b/api/http/handler/teams/team_inspect.go @@ -42,7 +42,7 @@ func (handler *Handler) teamInspect(w http.ResponseWriter, r *http.Request) *htt return httperror.Forbidden("Access denied to team", errors.ErrResourceAccessDenied) } - team, err := handler.DataStore.Team().Team(portainer.TeamID(teamID)) + team, err := handler.DataStore.Team().Read(portainer.TeamID(teamID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a team with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/teams/team_list.go b/api/http/handler/teams/team_list.go index 1a74f0938..5bbaa6df6 100644 --- a/api/http/handler/teams/team_list.go +++ b/api/http/handler/teams/team_list.go @@ -24,7 +24,7 @@ import ( // @failure 500 "Server error" // @router /teams [get] func (handler *Handler) teamList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - teams, err := handler.DataStore.Team().Teams() + teams, err := handler.DataStore.Team().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve teams from the database", err) } @@ -54,7 +54,7 @@ func (handler *Handler) teamList(w http.ResponseWriter, r *http.Request) *httper return httperror.InternalServerError("Unable to retrieve endpoint from the database", err) } - endpointGroup, err := handler.DataStore.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err := handler.DataStore.EndpointGroup().Read(endpoint.GroupID) if err != nil { return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) } diff --git a/api/http/handler/teams/team_update.go b/api/http/handler/teams/team_update.go index 14ae910dd..ce8d663a2 100644 --- a/api/http/handler/teams/team_update.go +++ b/api/http/handler/teams/team_update.go @@ -48,7 +48,7 @@ func (handler *Handler) teamUpdate(w http.ResponseWriter, r *http.Request) *http return httperror.BadRequest("Invalid request payload", err) } - team, err := handler.DataStore.Team().Team(portainer.TeamID(teamID)) + team, err := handler.DataStore.Team().Read(portainer.TeamID(teamID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a team with the specified identifier inside the database", err) } else if err != nil { @@ -59,7 +59,7 @@ func (handler *Handler) teamUpdate(w http.ResponseWriter, r *http.Request) *http team.Name = payload.Name } - err = handler.DataStore.Team().UpdateTeam(team.ID, team) + err = handler.DataStore.Team().Update(team.ID, team) if err != nil { return httperror.NotFound("Unable to persist team changes inside the database", err) } diff --git a/api/http/handler/users/user_create_access_token.go b/api/http/handler/users/user_create_access_token.go index ea5a32836..875635b61 100644 --- a/api/http/handler/users/user_create_access_token.go +++ b/api/http/handler/users/user_create_access_token.go @@ -79,7 +79,7 @@ func (handler *Handler) userCreateAccessToken(w http.ResponseWriter, r *http.Req return httperror.Forbidden("Permission denied to create user access token", httperrors.ErrUnauthorized) } - user, err := handler.DataStore.User().User(portainer.UserID(userID)) + user, err := handler.DataStore.User().Read(portainer.UserID(userID)) if err != nil { return httperror.BadRequest("Unable to find a user", err) } diff --git a/api/http/handler/users/user_delete.go b/api/http/handler/users/user_delete.go index 242747b5d..234a98131 100644 --- a/api/http/handler/users/user_delete.go +++ b/api/http/handler/users/user_delete.go @@ -45,7 +45,7 @@ func (handler *Handler) userDelete(w http.ResponseWriter, r *http.Request) *http return httperror.Forbidden("Cannot remove your own user account. Contact another administrator", errAdminCannotRemoveSelf) } - user, err := handler.DataStore.User().User(portainer.UserID(userID)) + user, err := handler.DataStore.User().Read(portainer.UserID(userID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a user with the specified identifier inside the database", err) } else if err != nil { @@ -64,7 +64,7 @@ func (handler *Handler) deleteAdminUser(w http.ResponseWriter, user *portainer.U return handler.deleteUser(w, user) } - users, err := handler.DataStore.User().Users() + users, err := handler.DataStore.User().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve users from the database", err) } @@ -84,7 +84,7 @@ func (handler *Handler) deleteAdminUser(w http.ResponseWriter, user *portainer.U } func (handler *Handler) deleteUser(w http.ResponseWriter, user *portainer.User) *httperror.HandlerError { - err := handler.DataStore.User().DeleteUser(user.ID) + err := handler.DataStore.User().Delete(user.ID) if err != nil { return httperror.InternalServerError("Unable to remove user from the database", err) } diff --git a/api/http/handler/users/user_get_access_tokens.go b/api/http/handler/users/user_get_access_tokens.go index 47e2b69ef..ba40939cf 100644 --- a/api/http/handler/users/user_get_access_tokens.go +++ b/api/http/handler/users/user_get_access_tokens.go @@ -42,7 +42,7 @@ func (handler *Handler) userGetAccessTokens(w http.ResponseWriter, r *http.Reque return httperror.Forbidden("Permission denied to get user access tokens", httperrors.ErrUnauthorized) } - _, err = handler.DataStore.User().User(portainer.UserID(userID)) + _, err = handler.DataStore.User().Read(portainer.UserID(userID)) if err != nil { if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a user with the specified identifier inside the database", err) diff --git a/api/http/handler/users/user_inspect.go b/api/http/handler/users/user_inspect.go index 160fde89f..80ed8fd56 100644 --- a/api/http/handler/users/user_inspect.go +++ b/api/http/handler/users/user_inspect.go @@ -42,7 +42,7 @@ func (handler *Handler) userInspect(w http.ResponseWriter, r *http.Request) *htt return httperror.Forbidden("Permission denied inspect user", errors.ErrResourceAccessDenied) } - user, err := handler.DataStore.User().User(portainer.UserID(userID)) + user, err := handler.DataStore.User().Read(portainer.UserID(userID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a user with the specified identifier inside the database", err) } else if err != nil { diff --git a/api/http/handler/users/user_list.go b/api/http/handler/users/user_list.go index d20e0b0d0..4535dc73a 100644 --- a/api/http/handler/users/user_list.go +++ b/api/http/handler/users/user_list.go @@ -26,7 +26,7 @@ import ( // @failure 500 "Server error" // @router /users [get] func (handler *Handler) userList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - users, err := handler.DataStore.User().Users() + users, err := handler.DataStore.User().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve users from the database", err) } @@ -52,7 +52,7 @@ func (handler *Handler) userList(w http.ResponseWriter, r *http.Request) *httper return httperror.InternalServerError("Unable to retrieve endpoint from the database", err) } - endpointGroup, err := handler.DataStore.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err := handler.DataStore.EndpointGroup().Read(endpoint.GroupID) if err != nil { return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) } diff --git a/api/http/handler/users/user_remove_access_token.go b/api/http/handler/users/user_remove_access_token.go index 99635621c..52b114bf1 100644 --- a/api/http/handler/users/user_remove_access_token.go +++ b/api/http/handler/users/user_remove_access_token.go @@ -48,7 +48,7 @@ func (handler *Handler) userRemoveAccessToken(w http.ResponseWriter, r *http.Req return httperror.Forbidden("Permission denied to get user access tokens", httperrors.ErrUnauthorized) } - _, err = handler.DataStore.User().User(portainer.UserID(userID)) + _, err = handler.DataStore.User().Read(portainer.UserID(userID)) if err != nil { if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a user with the specified identifier inside the database", err) diff --git a/api/http/handler/users/user_update.go b/api/http/handler/users/user_update.go index 844f38806..8c58003f6 100644 --- a/api/http/handler/users/user_update.go +++ b/api/http/handler/users/user_update.go @@ -87,7 +87,7 @@ func (handler *Handler) userUpdate(w http.ResponseWriter, r *http.Request) *http return httperror.Forbidden("Permission denied to update user to administrator role", httperrors.ErrResourceAccessDenied) } - user, err := handler.DataStore.User().User(portainer.UserID(userID)) + user, err := handler.DataStore.User().Read(portainer.UserID(userID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a user with the specified identifier inside the database", err) } else if err != nil { @@ -125,7 +125,7 @@ func (handler *Handler) userUpdate(w http.ResponseWriter, r *http.Request) *http user.TokenIssueAt = time.Now().Unix() } - err = handler.DataStore.User().UpdateUser(user.ID, user) + err = handler.DataStore.User().Update(user.ID, user) if err != nil { return httperror.InternalServerError("Unable to persist user changes inside the database", err) } diff --git a/api/http/handler/users/user_update_password.go b/api/http/handler/users/user_update_password.go index 95c0cd210..5239f0534 100644 --- a/api/http/handler/users/user_update_password.go +++ b/api/http/handler/users/user_update_password.go @@ -74,7 +74,7 @@ func (handler *Handler) userUpdatePassword(w http.ResponseWriter, r *http.Reques return httperror.BadRequest("Invalid request payload", err) } - user, err := handler.DataStore.User().User(portainer.UserID(userID)) + user, err := handler.DataStore.User().Read(portainer.UserID(userID)) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a user with the specified identifier inside the database", err) } else if err != nil { @@ -97,7 +97,7 @@ func (handler *Handler) userUpdatePassword(w http.ResponseWriter, r *http.Reques user.TokenIssueAt = time.Now().Unix() - err = handler.DataStore.User().UpdateUser(user.ID, user) + err = handler.DataStore.User().Update(user.ID, user) if err != nil { return httperror.InternalServerError("Unable to persist user changes inside the database", err) } diff --git a/api/http/handler/webhooks/webhook_delete.go b/api/http/handler/webhooks/webhook_delete.go index 3596130f9..5344bc928 100644 --- a/api/http/handler/webhooks/webhook_delete.go +++ b/api/http/handler/webhooks/webhook_delete.go @@ -37,7 +37,7 @@ func (handler *Handler) webhookDelete(w http.ResponseWriter, r *http.Request) *h return httperror.Forbidden("Not authorized to delete a webhook", errors.New("not authorized to delete a webhook")) } - err = handler.DataStore.Webhook().DeleteWebhook(portainer.WebhookID(id)) + err = handler.DataStore.Webhook().Delete(portainer.WebhookID(id)) if err != nil { return httperror.InternalServerError("Unable to remove the webhook from the database", err) } diff --git a/api/http/handler/webhooks/webhook_execute.go b/api/http/handler/webhooks/webhook_execute.go index e8b156055..5aea5c080 100644 --- a/api/http/handler/webhooks/webhook_execute.go +++ b/api/http/handler/webhooks/webhook_execute.go @@ -100,7 +100,7 @@ func (handler *Handler) executeServiceWebhook( } if registryID != 0 { - registry, err := handler.DataStore.Registry().Registry(registryID) + registry, err := handler.DataStore.Registry().Read(registryID) if err != nil { return httperror.InternalServerError("Error getting registry", err) } diff --git a/api/http/handler/webhooks/webhook_list.go b/api/http/handler/webhooks/webhook_list.go index 653e38895..64dc5698f 100644 --- a/api/http/handler/webhooks/webhook_list.go +++ b/api/http/handler/webhooks/webhook_list.go @@ -43,7 +43,7 @@ func (handler *Handler) webhookList(w http.ResponseWriter, r *http.Request) *htt return response.JSON(w, []portainer.Webhook{}) } - webhooks, err := handler.DataStore.Webhook().Webhooks() + webhooks, err := handler.DataStore.Webhook().ReadAll() if err != nil { return httperror.InternalServerError("Unable to retrieve webhooks from the database", err) } diff --git a/api/http/handler/webhooks/webhook_update.go b/api/http/handler/webhooks/webhook_update.go index 0f7436170..eda3e529f 100644 --- a/api/http/handler/webhooks/webhook_update.go +++ b/api/http/handler/webhooks/webhook_update.go @@ -48,7 +48,7 @@ func (handler *Handler) webhookUpdate(w http.ResponseWriter, r *http.Request) *h return httperror.BadRequest("Invalid request payload", err) } - webhook, err := handler.DataStore.Webhook().Webhook(webhookID) + webhook, err := handler.DataStore.Webhook().Read(webhookID) if handler.DataStore.IsErrObjectNotFound(err) { return httperror.NotFound("Unable to find a webhooks with the specified identifier inside the database", err) } else if err != nil { @@ -78,7 +78,7 @@ func (handler *Handler) webhookUpdate(w http.ResponseWriter, r *http.Request) *h webhook.RegistryID = payload.RegistryID - err = handler.DataStore.Webhook().UpdateWebhook(portainer.WebhookID(id), webhook) + err = handler.DataStore.Webhook().Update(portainer.WebhookID(id), webhook) if err != nil { return httperror.InternalServerError("Unable to persist the webhook inside the database", err) } diff --git a/api/http/proxy/factory/azure/access_control.go b/api/http/proxy/factory/azure/access_control.go index e2ebb41f0..bf6f237f8 100644 --- a/api/http/proxy/factory/azure/access_control.go +++ b/api/http/proxy/factory/azure/access_control.go @@ -18,7 +18,7 @@ func (transport *Transport) createAzureRequestContext(request *http.Request) (*a return nil, err } - resourceControls, err := transport.dataStore.ResourceControl().ResourceControls() + resourceControls, err := transport.dataStore.ResourceControl().ReadAll() if err != nil { return nil, err } @@ -139,7 +139,7 @@ func (transport *Transport) removeResourceControl(containerGroup map[string]inte if ok { resourceControl := transport.findResourceControl(containerGroupID, context) if resourceControl != nil { - err := transport.dataStore.ResourceControl().DeleteResourceControl(resourceControl.ID) + err := transport.dataStore.ResourceControl().Delete(resourceControl.ID) return err } } else { diff --git a/api/http/proxy/factory/docker/transport.go b/api/http/proxy/factory/docker/transport.go index 832d383f1..a7bc06f4c 100644 --- a/api/http/proxy/factory/docker/transport.go +++ b/api/http/proxy/factory/docker/transport.go @@ -179,7 +179,7 @@ func (transport *Transport) proxyAgentRequest(r *http.Request) (*http.Response, } if registryID != 0 { - registry, err = transport.dataStore.Registry().Registry(portainer.RegistryID(registryID)) + registry, err = transport.dataStore.Registry().Read(portainer.RegistryID(registryID)) if err != nil { return nil, fmt.Errorf("failed fetching registry: %w", err) } @@ -507,7 +507,7 @@ func (transport *Transport) restrictedResourceOperation(request *http.Request, r userTeamIDs = append(userTeamIDs, membership.TeamID) } - resourceControls, err := transport.dataStore.ResourceControl().ResourceControls() + resourceControls, err := transport.dataStore.ResourceControl().ReadAll() if err != nil { return nil, err } @@ -654,7 +654,7 @@ func (transport *Transport) executeGenericResourceDeletionOperation(request *htt } if resourceControl != nil { - err = transport.dataStore.ResourceControl().DeleteResourceControl(resourceControl.ID) + err = transport.dataStore.ResourceControl().Delete(resourceControl.ID) if err != nil { return response, err } @@ -702,13 +702,13 @@ func (transport *Transport) createRegistryAccessContext(request *http.Request) ( endpointID: transport.endpoint.ID, } - user, err := transport.dataStore.User().User(tokenData.ID) + user, err := transport.dataStore.User().Read(tokenData.ID) if err != nil { return nil, err } accessContext.user = user - registries, err := transport.dataStore.Registry().Registries() + registries, err := transport.dataStore.Registry().ReadAll() if err != nil { return nil, err } @@ -735,7 +735,7 @@ func (transport *Transport) createOperationContext(request *http.Request) (*rest return nil, err } - resourceControls, err := transport.dataStore.ResourceControl().ResourceControls() + resourceControls, err := transport.dataStore.ResourceControl().ReadAll() if err != nil { return nil, err } diff --git a/api/http/proxy/factory/kubernetes/namespaces.go b/api/http/proxy/factory/kubernetes/namespaces.go index c501f7cc7..586bc8f5d 100644 --- a/api/http/proxy/factory/kubernetes/namespaces.go +++ b/api/http/proxy/factory/kubernetes/namespaces.go @@ -12,7 +12,7 @@ func (transport *baseTransport) proxyNamespaceDeleteOperation(request *http.Requ return nil, errors.WithMessagef(err, "failed to delete a namespace [%s] from portainer config", namespace) } - registries, err := transport.dataStore.Registry().Registries() + registries, err := transport.dataStore.Registry().ReadAll() if err != nil { return nil, err } @@ -39,7 +39,7 @@ func (transport *baseTransport) proxyNamespaceDeleteOperation(request *http.Requ } registry.RegistryAccesses[endpointID] = updatedAccessPolicies - err := transport.dataStore.Registry().UpdateRegistry(registry.ID, ®istry) + err := transport.dataStore.Registry().Update(registry.ID, ®istry) if err != nil { return nil, err } @@ -47,14 +47,14 @@ func (transport *baseTransport) proxyNamespaceDeleteOperation(request *http.Requ } } - stacks, err := transport.dataStore.Stack().Stacks() + stacks, err := transport.dataStore.Stack().ReadAll() if err != nil { return nil, err } for _, s := range stacks { if s.Namespace == namespace && s.EndpointID == transport.endpoint.ID { - if err := transport.dataStore.Stack().DeleteStack(s.ID); err != nil { + if err := transport.dataStore.Stack().Delete(s.ID); err != nil { return nil, err } } diff --git a/api/http/proxy/factory/kubernetes/transport.go b/api/http/proxy/factory/kubernetes/transport.go index aeab4d876..2de13c695 100644 --- a/api/http/proxy/factory/kubernetes/transport.go +++ b/api/http/proxy/factory/kubernetes/transport.go @@ -172,7 +172,7 @@ func decorateAgentDockerHubRequest(r *http.Request, dataStore dataservices.DataS } if registryID != 0 { - registry, err = dataStore.Registry().Registry(portainer.RegistryID(registryID)) + registry, err = dataStore.Registry().Read(portainer.RegistryID(registryID)) if err != nil { return fmt.Errorf("failed fetching registry: %w", err) } diff --git a/api/http/security/bouncer.go b/api/http/security/bouncer.go index 8c61f48f7..9291aaa8a 100644 --- a/api/http/security/bouncer.go +++ b/api/http/security/bouncer.go @@ -134,7 +134,7 @@ func (bouncer *RequestBouncer) AuthorizedEndpointOperation(r *http.Request, endp return err } - group, err := bouncer.dataStore.EndpointGroup().EndpointGroup(endpoint.GroupID) + group, err := bouncer.dataStore.EndpointGroup().Read(endpoint.GroupID) if err != nil { return err } @@ -217,7 +217,7 @@ func (bouncer *RequestBouncer) mwCheckPortainerAuthorizations(next http.Handler, return } - _, err = bouncer.dataStore.User().User(tokenData.ID) + _, err = bouncer.dataStore.User().Read(tokenData.ID) if bouncer.dataStore.IsErrObjectNotFound(err) { httperror.WriteError(w, http.StatusUnauthorized, "Unauthorized", httperrors.ErrUnauthorized) return @@ -288,7 +288,7 @@ func (bouncer *RequestBouncer) mwAuthenticateFirst(tokenLookups []tokenLookup, n return } - _, err := bouncer.dataStore.User().User(token.ID) + _, err := bouncer.dataStore.User().Read(token.ID) if err != nil && bouncer.dataStore.IsErrObjectNotFound(err) { httperror.WriteError(w, http.StatusUnauthorized, "Unauthorized", httperrors.ErrUnauthorized) return diff --git a/api/internal/authorization/authorizations.go b/api/internal/authorization/authorizations.go index 47e52e162..bd71717a5 100644 --- a/api/internal/authorization/authorizations.go +++ b/api/internal/authorization/authorizations.go @@ -432,7 +432,7 @@ func DefaultPortainerAuthorizations() portainer.Authorizations { // UpdateUsersAuthorizations will trigger an update of the authorizations for all the users. func (service *Service) UpdateUsersAuthorizations() error { - users, err := service.dataStore.User().Users() + users, err := service.dataStore.User().ReadAll() if err != nil { return err } @@ -448,7 +448,7 @@ func (service *Service) UpdateUsersAuthorizations() error { } func (service *Service) updateUserAuthorizations(userID portainer.UserID) error { - user, err := service.dataStore.User().User(userID) + user, err := service.dataStore.User().Read(userID) if err != nil { return err } @@ -460,7 +460,7 @@ func (service *Service) updateUserAuthorizations(userID portainer.UserID) error user.EndpointAuthorizations = endpointAuthorizations - return service.dataStore.User().UpdateUser(userID, user) + return service.dataStore.User().Update(userID, user) } func (service *Service) getAuthorizations(user *portainer.User) (portainer.EndpointAuthorizations, error) { @@ -479,12 +479,12 @@ func (service *Service) getAuthorizations(user *portainer.User) (portainer.Endpo return endpointAuthorizations, err } - endpointGroups, err := service.dataStore.EndpointGroup().EndpointGroups() + endpointGroups, err := service.dataStore.EndpointGroup().ReadAll() if err != nil { return endpointAuthorizations, err } - roles, err := service.dataStore.Role().Roles() + roles, err := service.dataStore.Role().ReadAll() if err != nil { return endpointAuthorizations, err } @@ -605,7 +605,7 @@ func getAuthorizationsFromRoles(roleIdentifiers []portainer.RoleID, roles []port } func (service *Service) UserIsAdminOrAuthorized(userID portainer.UserID, endpointID portainer.EndpointID, authorizations []portainer.Authorization) (bool, error) { - user, err := service.dataStore.User().User(userID) + user, err := service.dataStore.User().Read(userID) if err != nil { return false, err } diff --git a/api/internal/authorization/endpoint_role_with_override.go b/api/internal/authorization/endpoint_role_with_override.go index 3ba1a49d3..c5bdaf8bb 100644 --- a/api/internal/authorization/endpoint_role_with_override.go +++ b/api/internal/authorization/endpoint_role_with_override.go @@ -68,7 +68,7 @@ func (service *Service) getUserEndpointAccessWithPolicies( } if endpointGroup == nil { - endpointGroup, err = tx.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err = tx.EndpointGroup().Read(endpoint.GroupID) if err != nil { return false, err } @@ -114,7 +114,7 @@ func (service *Service) getTeamEndpointAccessWithPolicies( ) (bool, error) { if endpointGroup == nil { var err error - endpointGroup, err = tx.EndpointGroup().EndpointGroup(endpoint.GroupID) + endpointGroup, err = tx.EndpointGroup().Read(endpoint.GroupID) if err != nil { return false, err } diff --git a/api/internal/edge/edgegroup.go b/api/internal/edge/edgegroup.go index 43957b680..fb8d38ed0 100644 --- a/api/internal/edge/edgegroup.go +++ b/api/internal/edge/edgegroup.go @@ -51,14 +51,14 @@ func GetEndpointsFromEdgeGroups(edgeGroupIDs []portainer.EdgeGroupID, datastore return nil, err } - endpointGroups, err := datastore.EndpointGroup().EndpointGroups() + endpointGroups, err := datastore.EndpointGroup().ReadAll() if err != nil { return nil, err } var response []portainer.EndpointID for _, edgeGroupID := range edgeGroupIDs { - edgeGroup, err := datastore.EdgeGroup().EdgeGroup(edgeGroupID) + edgeGroup, err := datastore.EdgeGroup().Read(edgeGroupID) if err != nil { return nil, err } diff --git a/api/internal/edge/edgejob.go b/api/internal/edge/edgejob.go index 6869ecc8b..4838dbc6a 100644 --- a/api/internal/edge/edgejob.go +++ b/api/internal/edge/edgejob.go @@ -7,7 +7,7 @@ import ( // LoadEdgeJobs registers all edge jobs inside corresponding environment(endpoint) tunnel func LoadEdgeJobs(dataStore dataservices.DataStore, reverseTunnelService portainer.ReverseTunnelService) error { - edgeJobs, err := dataStore.EdgeJob().EdgeJobs() + edgeJobs, err := dataStore.EdgeJob().ReadAll() if err != nil { return err } diff --git a/api/internal/edge/edgestack.go b/api/internal/edge/edgestack.go index 6e6b6901f..1a03f1c23 100644 --- a/api/internal/edge/edgestack.go +++ b/api/internal/edge/edgestack.go @@ -48,12 +48,12 @@ func FetchEndpointRelationsConfig(tx dataservices.DataStoreTx) (*EndpointRelatio return nil, fmt.Errorf("unable to retrieve environments from database: %w", err) } - endpointGroups, err := tx.EndpointGroup().EndpointGroups() + endpointGroups, err := tx.EndpointGroup().ReadAll() if err != nil { return nil, fmt.Errorf("unable to retrieve environment groups from database: %w", err) } - edgeGroups, err := tx.EdgeGroup().EdgeGroups() + edgeGroups, err := tx.EdgeGroup().ReadAll() if err != nil { return nil, fmt.Errorf("unable to retrieve edge groups from database: %w", err) } diff --git a/api/internal/registryutils/access/access.go b/api/internal/registryutils/access/access.go index 53f0d6a5e..70524b3bb 100644 --- a/api/internal/registryutils/access/access.go +++ b/api/internal/registryutils/access/access.go @@ -14,7 +14,7 @@ func hasPermission( endpointID portainer.EndpointID, registry *portainer.Registry, ) (hasPermission bool, err error) { - user, err := dataStore.User().User(userID) + user, err := dataStore.User().Read(userID) if err != nil { return } @@ -41,7 +41,7 @@ func GetAccessibleRegistry( registryID portainer.RegistryID, ) (registry *portainer.Registry, err error) { - registry, err = dataStore.Registry().Registry(registryID) + registry, err = dataStore.Registry().Read(registryID) if err != nil { return } diff --git a/api/internal/registryutils/ecr_kube_secret.go b/api/internal/registryutils/ecr_kube_secret.go index 040fb4a40..9f1f3c644 100644 --- a/api/internal/registryutils/ecr_kube_secret.go +++ b/api/internal/registryutils/ecr_kube_secret.go @@ -16,7 +16,7 @@ func isRegistryAssignedToNamespace(registry portainer.Registry, endpointID porta } func RefreshEcrSecret(cli portainer.KubeClient, endpoint *portainer.Endpoint, dataStore dataservices.DataStore, namespace string) (err error) { - registries, err := dataStore.Registry().Registries() + registries, err := dataStore.Registry().ReadAll() if err != nil { return } diff --git a/api/internal/registryutils/ecr_reg_token.go b/api/internal/registryutils/ecr_reg_token.go index 3e4451044..ee8ecdf30 100644 --- a/api/internal/registryutils/ecr_reg_token.go +++ b/api/internal/registryutils/ecr_reg_token.go @@ -24,7 +24,7 @@ func doGetRegToken(dataStore dataservices.DataStore, registry *portainer.Registr registry.AccessToken = *accessToken registry.AccessTokenExpiry = expiryAt.Unix() - err = dataStore.Registry().UpdateRegistry(registry.ID, registry) + err = dataStore.Registry().Update(registry.ID, registry) return } diff --git a/api/internal/snapshot/snapshot.go b/api/internal/snapshot/snapshot.go index f48d3d824..fdc57714b 100644 --- a/api/internal/snapshot/snapshot.go +++ b/api/internal/snapshot/snapshot.go @@ -133,7 +133,7 @@ func (service *Service) FillSnapshotData(endpoint *portainer.Endpoint) error { } func FillSnapshotData(tx dataservices.DataStoreTx, endpoint *portainer.Endpoint) error { - snapshot, err := tx.Snapshot().Snapshot(endpoint.ID) + snapshot, err := tx.Snapshot().Read(endpoint.ID) if tx.IsErrObjectNotFound(err) { endpoint.Snapshots = []portainer.DockerSnapshot{} endpoint.Kubernetes.Snapshots = []portainer.KubernetesSnapshot{} diff --git a/api/internal/testhelpers/datastore.go b/api/internal/testhelpers/datastore.go index 9180e83f5..617499a00 100644 --- a/api/internal/testhelpers/datastore.go +++ b/api/internal/testhelpers/datastore.go @@ -131,15 +131,15 @@ type stubUserService struct { } func (s *stubUserService) BucketName() string { return "users" } -func (s *stubUserService) User(ID portainer.UserID) (*portainer.User, error) { return nil, nil } +func (s *stubUserService) Read(ID portainer.UserID) (*portainer.User, error) { return nil, nil } func (s *stubUserService) UserByUsername(username string) (*portainer.User, error) { return nil, nil } -func (s *stubUserService) Users() ([]portainer.User, error) { return s.users, nil } +func (s *stubUserService) ReadAll() ([]portainer.User, error) { return s.users, nil } func (s *stubUserService) UsersByRole(role portainer.UserRole) ([]portainer.User, error) { return s.users, nil } -func (s *stubUserService) Create(user *portainer.User) error { return nil } -func (s *stubUserService) UpdateUser(ID portainer.UserID, user *portainer.User) error { return nil } -func (s *stubUserService) DeleteUser(ID portainer.UserID) error { return nil } +func (s *stubUserService) Create(user *portainer.User) error { return nil } +func (s *stubUserService) Update(ID portainer.UserID, user *portainer.User) error { return nil } +func (s *stubUserService) Delete(ID portainer.UserID) error { return nil } // WithUsers testDatastore option that will instruct testDatastore to return provided users func WithUsers(us []portainer.User) datastoreOption { @@ -152,22 +152,25 @@ type stubEdgeJobService struct { jobs []portainer.EdgeJob } -func (s *stubEdgeJobService) BucketName() string { return "edgejob" } -func (s *stubEdgeJobService) EdgeJobs() ([]portainer.EdgeJob, error) { return s.jobs, nil } -func (s *stubEdgeJobService) EdgeJob(ID portainer.EdgeJobID) (*portainer.EdgeJob, error) { +func (s *stubEdgeJobService) BucketName() string { return "edgejobs" } +func (s *stubEdgeJobService) ReadAll() ([]portainer.EdgeJob, error) { return s.jobs, nil } +func (s *stubEdgeJobService) Read(ID portainer.EdgeJobID) (*portainer.EdgeJob, error) { return nil, nil } -func (s *stubEdgeJobService) Create(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { +func (s *stubEdgeJobService) Create(edgeJob *portainer.EdgeJob) error { return nil } -func (s *stubEdgeJobService) UpdateEdgeJob(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { +func (s *stubEdgeJobService) CreateWithID(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { + return nil +} +func (s *stubEdgeJobService) Update(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { return nil } func (s *stubEdgeJobService) UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc func(edgeJob *portainer.EdgeJob)) error { return nil } -func (s *stubEdgeJobService) DeleteEdgeJob(ID portainer.EdgeJobID) error { return nil } -func (s *stubEdgeJobService) GetNextIdentifier() int { return 0 } +func (s *stubEdgeJobService) Delete(ID portainer.EdgeJobID) error { return nil } +func (s *stubEdgeJobService) GetNextIdentifier() int { return 0 } // WithEdgeJobs option will instruct testDatastore to return provided jobs func WithEdgeJobs(js []portainer.EdgeJob) datastoreOption { diff --git a/api/jwt/jwt.go b/api/jwt/jwt.go index 07819f0b9..d0e804378 100644 --- a/api/jwt/jwt.go +++ b/api/jwt/jwt.go @@ -125,7 +125,7 @@ func (service *Service) ParseAndVerifyToken(token string) (*portainer.TokenData, if err == nil && parsedToken != nil { if cl, ok := parsedToken.Claims.(*claims); ok && parsedToken.Valid { - user, err := service.dataStore.User().User(portainer.UserID(cl.UserID)) + user, err := service.dataStore.User().Read(portainer.UserID(cl.UserID)) if err != nil { return nil, errInvalidJWTToken } diff --git a/api/stacks/deployments/deploy.go b/api/stacks/deployments/deploy.go index 145bd7702..89db745c9 100644 --- a/api/stacks/deployments/deploy.go +++ b/api/stacks/deployments/deploy.go @@ -28,7 +28,7 @@ func (e *StackAuthorMissingErr) Error() string { func RedeployWhenChanged(stackID portainer.StackID, deployer StackDeployer, datastore dataservices.DataStore, gitService portainer.GitService) error { log.Debug().Int("stack_id", int(stackID)).Msg("redeploying stack") - stack, err := datastore.Stack().Stack(stackID) + stack, err := datastore.Stack().Read(stackID) if err != nil { return errors.WithMessagef(err, "failed to get the stack %v", stackID) } @@ -116,7 +116,7 @@ func RedeployWhenChanged(stackID portainer.StackID, deployer StackDeployer, data return errors.Errorf("cannot update stack, type %v is unsupported", stack.Type) } - if err := datastore.Stack().UpdateStack(stack.ID, stack); err != nil { + if err := datastore.Stack().Update(stack.ID, stack); err != nil { return errors.WithMessagef(err, "failed to update the stack %v", stack.ID) } @@ -124,7 +124,7 @@ func RedeployWhenChanged(stackID portainer.StackID, deployer StackDeployer, data } func getUserRegistries(datastore dataservices.DataStore, user *portainer.User, endpointID portainer.EndpointID) ([]portainer.Registry, error) { - registries, err := datastore.Registry().Registries() + registries, err := datastore.Registry().ReadAll() if err != nil { return nil, errors.WithMessage(err, "unable to retrieve registries from the database") } diff --git a/api/stacks/deployments/deploy_test.go b/api/stacks/deployments/deploy_test.go index aec88ebf3..3cf9c8b19 100644 --- a/api/stacks/deployments/deploy_test.go +++ b/api/stacks/deployments/deploy_test.go @@ -162,7 +162,7 @@ func Test_redeployWhenChanged(t *testing.T) { t.Run("can deploy docker compose stack", func(t *testing.T) { stack.Type = portainer.DockerComposeStack - store.Stack().UpdateStack(stack.ID, &stack) + store.Stack().Update(stack.ID, &stack) err = RedeployWhenChanged(1, &noopDeployer{}, store, testhelpers.NewGitService(nil, "newHash")) assert.NoError(t, err) @@ -170,7 +170,7 @@ func Test_redeployWhenChanged(t *testing.T) { t.Run("can deploy docker swarm stack", func(t *testing.T) { stack.Type = portainer.DockerSwarmStack - store.Stack().UpdateStack(stack.ID, &stack) + store.Stack().Update(stack.ID, &stack) err = RedeployWhenChanged(1, &noopDeployer{}, store, testhelpers.NewGitService(nil, "newHash")) assert.NoError(t, err) @@ -178,7 +178,7 @@ func Test_redeployWhenChanged(t *testing.T) { t.Run("can deploy kube app", func(t *testing.T) { stack.Type = portainer.KubernetesStack - store.Stack().UpdateStack(stack.ID, &stack) + store.Stack().Update(stack.ID, &stack) err = RedeployWhenChanged(1, &noopDeployer{}, store, testhelpers.NewGitService(nil, "newHash")) assert.NoError(t, err) diff --git a/api/stacks/deployments/deployment_compose_config.go b/api/stacks/deployments/deployment_compose_config.go index 1124cf170..8785a7590 100644 --- a/api/stacks/deployments/deployment_compose_config.go +++ b/api/stacks/deployments/deployment_compose_config.go @@ -24,12 +24,12 @@ type ComposeStackDeploymentConfig struct { } func CreateComposeStackDeploymentConfig(securityContext *security.RestrictedRequestContext, stack *portainer.Stack, endpoint *portainer.Endpoint, dataStore dataservices.DataStore, fileService portainer.FileService, deployer StackDeployer, forcePullImage, forceCreate bool) (*ComposeStackDeploymentConfig, error) { - user, err := dataStore.User().User(securityContext.UserID) + user, err := dataStore.User().Read(securityContext.UserID) if err != nil { return nil, fmt.Errorf("unable to load user information from the database: %w", err) } - registries, err := dataStore.Registry().Registries() + registries, err := dataStore.Registry().ReadAll() if err != nil { return nil, fmt.Errorf("unable to retrieve registries from the database: %w", err) } diff --git a/api/stacks/deployments/deployment_swarm_config.go b/api/stacks/deployments/deployment_swarm_config.go index 7a4f2ca10..872f392d1 100644 --- a/api/stacks/deployments/deployment_swarm_config.go +++ b/api/stacks/deployments/deployment_swarm_config.go @@ -24,12 +24,12 @@ type SwarmStackDeploymentConfig struct { } func CreateSwarmStackDeploymentConfig(securityContext *security.RestrictedRequestContext, stack *portainer.Stack, endpoint *portainer.Endpoint, dataStore dataservices.DataStore, fileService portainer.FileService, deployer StackDeployer, prune bool, pullImage bool) (*SwarmStackDeploymentConfig, error) { - user, err := dataStore.User().User(securityContext.UserID) + user, err := dataStore.User().Read(securityContext.UserID) if err != nil { return nil, fmt.Errorf("unable to load user information from the database: %w", err) } - registries, err := dataStore.Registry().Registries() + registries, err := dataStore.Registry().ReadAll() if err != nil { return nil, fmt.Errorf("unable to retrieve registries from the database: %w", err) } diff --git a/api/stacks/deployments/scheduled.go b/api/stacks/deployments/scheduled.go index 0bf4b28fe..c47ff62b4 100644 --- a/api/stacks/deployments/scheduled.go +++ b/api/stacks/deployments/scheduled.go @@ -26,7 +26,7 @@ func StartStackSchedules(scheduler *scheduler.Scheduler, stackdeployer StackDepl }) stack.AutoUpdate.JobID = jobID - if err := datastore.Stack().UpdateStack(stack.ID, &stack); err != nil { + if err := datastore.Stack().Update(stack.ID, &stack); err != nil { return errors.Wrap(err, "failed to update stack job id") } }