1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-19 05:19:39 +02:00

feat(dataservices): unify access methods and abstract away redundant code [EE-5628] (#9115)

This commit is contained in:
andres-portainer 2023-06-22 18:28:07 -03:00 committed by GitHub
parent 4c6bbe9a2f
commit 4cc96b4b30
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
171 changed files with 714 additions and 1590 deletions

View file

@ -19,6 +19,8 @@ linters-settings:
- github.com/sirupsen/logrus: 'logging is allowed only by github.com/rs/zerolog' - github.com/sirupsen/logrus: 'logging is allowed only by github.com/rs/zerolog'
ignore-file-rules: ignore-file-rules:
- '**/*_test.go' - '**/*_test.go'
- '**/base.go'
- '**/base_tx.go'
# errorlint is causing a typecheck error for some reason. The go compiler will report these # errorlint is causing a typecheck error for some reason. The go compiler will report these
# anyway, so ignore them from the linter # anyway, so ignore them from the linter

View file

@ -53,7 +53,7 @@ func (a *apiKeyService) GenerateApiKey(user portainer.User, description string)
Digest: hashDigest, Digest: hashDigest,
} }
err := a.apiKeyRepository.CreateAPIKey(apiKey) err := a.apiKeyRepository.Create(apiKey)
if err != nil { if err != nil {
return "", nil, errors.Wrap(err, "Unable to create API key") 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. // GetAPIKey returns an API key by its ID.
func (a *apiKeyService) GetAPIKey(apiKeyID portainer.APIKeyID) (*portainer.APIKey, error) { 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. // 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") 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 { if err != nil {
return portainer.User{}, portainer.APIKey{}, errors.Wrap(err, "Unable to retrieve digest user") 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") return errors.Wrap(err, "Unable to retrieve API key")
} }
a.cache.Set(apiKey.Digest, user, *apiKey) 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. // DeleteAPIKey deletes an API key and removes the digest/api-key entry from the cache.
func (a *apiKeyService) DeleteAPIKey(apiKeyID portainer.APIKeyID) error { func (a *apiKeyService) DeleteAPIKey(apiKeyID portainer.APIKeyID) error {
// get api-key digest to remove from cache // get api-key digest to remove from cache
apiKey, err := a.apiKeyRepository.GetAPIKey(apiKeyID) apiKey, err := a.apiKeyRepository.Read(apiKeyID)
if err != nil { if err != nil {
return errors.Wrap(err, fmt.Sprintf("Unable to retrieve API key: %d", apiKeyID)) return errors.Wrap(err, fmt.Sprintf("Unable to retrieve API key: %d", apiKeyID))
} }
// delete the user/api-key from cache // delete the user/api-key from cache
a.cache.Delete(apiKey.Digest) a.cache.Delete(apiKey.Digest)
return a.apiKeyRepository.DeleteAPIKey(apiKeyID) return a.apiKeyRepository.Delete(apiKeyID)
} }
func (a *apiKeyService) InvalidateUserKeyCache(userId portainer.UserID) bool { func (a *apiKeyService) InvalidateUserKeyCache(userId portainer.UserID) bool {

View file

@ -6,19 +6,18 @@ import (
"fmt" "fmt"
portainer "github.com/portainer/portainer/api" portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/dataservices"
dserrors "github.com/portainer/portainer/api/dataservices/errors" dserrors "github.com/portainer/portainer/api/dataservices/errors"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
const ( // BucketName represents the name of the bucket where this service stores data.
// BucketName represents the name of the bucket where this service stores data. const BucketName = "api_key"
BucketName = "api_key"
)
// Service represents a service for managing api-key data. // Service represents a service for managing api-key data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.APIKey, portainer.APIKeyID]
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -29,7 +28,10 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.APIKey, portainer.APIKeyID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
@ -37,14 +39,14 @@ func NewService(connection portainer.Connection) (*Service, error) {
func (service *Service) GetAPIKeysByUserID(userID portainer.UserID) ([]portainer.APIKey, error) { func (service *Service) GetAPIKeysByUserID(userID portainer.UserID) ([]portainer.APIKey, error) {
var result = make([]portainer.APIKey, 0) var result = make([]portainer.APIKey, 0)
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.APIKey{}, &portainer.APIKey{},
func(obj interface{}) (interface{}, error) { func(obj interface{}) (interface{}, error) {
record, ok := obj.(*portainer.APIKey) record, ok := obj.(*portainer.APIKey)
if !ok { if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to APIKey object") 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 { 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) { func (service *Service) GetAPIKeyByDigest(digest []byte) (*portainer.APIKey, error) {
var k *portainer.APIKey var k *portainer.APIKey
stop := fmt.Errorf("ok") stop := fmt.Errorf("ok")
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.APIKey{}, &portainer.APIKey{},
func(obj interface{}) (interface{}, error) { func(obj interface{}) (interface{}, error) {
key, ok := obj.(*portainer.APIKey) key, ok := obj.(*portainer.APIKey)
if !ok { if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to APIKey object") 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) { if bytes.Equal(key.Digest, digest) {
k = key k = key
@ -90,9 +92,9 @@ func (service *Service) GetAPIKeyByDigest(digest []byte) (*portainer.APIKey, err
return nil, err return nil, err
} }
// CreateAPIKey creates a new APIKey object. // Create creates a new APIKey object.
func (service *Service) CreateAPIKey(record *portainer.APIKey) error { func (service *Service) Create(record *portainer.APIKey) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
record.ID = portainer.APIKeyID(id) 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)
}

66
api/dataservices/base.go Normal file
View file

@ -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)
})
}

View file

@ -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)
}

View file

@ -10,11 +10,7 @@ const BucketName = "customtemplates"
// Service represents a service for managing custom template data. // Service represents a service for managing custom template data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.CustomTemplate, portainer.CustomTemplateID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -25,53 +21,20 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.CustomTemplate, portainer.CustomTemplateID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, 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. // CreateCustomTemplate uses the existing id and saves it.
// TODO: where does the ID come from, and is it safe? // TODO: where does the ID come from, and is it safe?
func (service *Service) Create(customTemplate *portainer.CustomTemplate) error { 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. // GetNextIdentifier returns the next identifier for a custom template.
func (service *Service) GetNextIdentifier() int { func (service *Service) GetNextIdentifier() int {
return service.connection.GetNextIdentifier(BucketName) return service.Connection.GetNextIdentifier(BucketName)
} }

View file

@ -2,6 +2,7 @@ package edgegroup
import ( import (
portainer "github.com/portainer/portainer/api" portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/dataservices"
) )
// BucketName represents the name of the bucket where this service stores data. // 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. // Service represents a service for managing Edge group data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.EdgeGroup, portainer.EdgeGroupID]
} }
func (service *Service) BucketName() string { func (service *Service) BucketName() string {
@ -24,69 +25,36 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.EdgeGroup, portainer.EdgeGroupID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.EdgeGroup, portainer.EdgeGroupID]{
tx: tx, 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. // 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 { 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{} edgeGroup := &portainer.EdgeGroup{}
return service.connection.UpdateObjectFunc(BucketName, id, edgeGroup, func() { return service.Connection.UpdateObjectFunc(BucketName, id, edgeGroup, func() {
updateFunc(edgeGroup) 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. // CreateEdgeGroup assign an ID to a new Edge group and saves it.
func (service *Service) Create(group *portainer.EdgeGroup) error { 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) return service.Tx(tx).Create(group)
}) })
} }

View file

@ -3,48 +3,12 @@ package edgegroup
import ( import (
"errors" "errors"
"github.com/portainer/portainer/api/dataservices"
portainer "github.com/portainer/portainer/api" portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/dataservices"
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.EdgeGroup, portainer.EdgeGroupID]
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)
} }
// UpdateEdgeGroupFunc is a no-op inside a transaction. // 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") 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 { func (service ServiceTx) Create(group *portainer.EdgeGroup) error {
return service.tx.CreateObject( return service.Tx.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
group.ID = portainer.EdgeGroupID(id) group.ID = portainer.EdgeGroupID(id)

View file

@ -10,11 +10,7 @@ const BucketName = "edgejobs"
// Service represents a service for managing edge jobs data. // Service represents a service for managing edge jobs data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.EdgeJob, portainer.EdgeJobID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -25,75 +21,50 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.EdgeJob, portainer.EdgeJobID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.EdgeJob, portainer.EdgeJobID]{
tx: tx, 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 // 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 edgeJob.ID = ID
return service.connection.CreateObjectWithId( return service.Connection.CreateObjectWithId(
BucketName, BucketName,
int(edgeJob.ID), int(edgeJob.ID),
edgeJob, 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. // UpdateEdgeJobFunc updates an edge job inside a transaction avoiding data races.
func (service *Service) UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc func(edgeJob *portainer.EdgeJob)) error { 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{} edgeJob := &portainer.EdgeJob{}
return service.connection.UpdateObjectFunc(BucketName, id, edgeJob, func() { return service.Connection.UpdateObjectFunc(BucketName, id, edgeJob, func() {
updateFunc(edgeJob) 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). // GetNextIdentifier returns the next identifier for an environment(endpoint).
func (service *Service) GetNextIdentifier() int { func (service *Service) GetNextIdentifier() int {
return service.connection.GetNextIdentifier(BucketName) return service.Connection.GetNextIdentifier(BucketName)
} }

View file

@ -8,49 +8,19 @@ import (
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.EdgeJob, portainer.EdgeJobID]
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
} }
// Create creates a new EdgeJob // Create creates a new EdgeJob
func (service ServiceTx) Create(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { func (service ServiceTx) Create(edgeJob *portainer.EdgeJob) error {
edgeJob.ID = ID return service.CreateWithID(portainer.EdgeJobID(service.GetNextIdentifier()), edgeJob)
return service.tx.CreateObjectWithId(BucketName, int(edgeJob.ID), edgeJob)
} }
// UpdateEdgeJob updates an edge job // CreateWithID creates a new EdgeJob
func (service ServiceTx) UpdateEdgeJob(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error { func (service ServiceTx) CreateWithID(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error {
identifier := service.service.connection.ConvertToKey(int(ID)) edgeJob.ID = ID
return service.tx.UpdateObject(BucketName, identifier, edgeJob)
return service.Tx.CreateObjectWithId(BucketName, int(edgeJob.ID), edgeJob)
} }
// UpdateEdgeJobFunc is a no-op inside a transaction. // 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") 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). // GetNextIdentifier returns the next identifier for an environment(endpoint).
func (service ServiceTx) GetNextIdentifier() int { func (service ServiceTx) GetNextIdentifier() int {
return service.tx.GetNextIdentifier(BucketName) return service.Tx.GetNextIdentifier(BucketName)
} }

View file

@ -12,11 +12,7 @@ const (
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.EndpointGroup, portainer.EndpointGroupID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -27,56 +23,26 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.EndpointGroup, portainer.EndpointGroupID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.EndpointGroup, portainer.EndpointGroupID]{
tx: tx, 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. // CreateEndpointGroup assign an ID to a new environment(endpoint) group and saves it.
func (service *Service) Create(endpointGroup *portainer.EndpointGroup) error { func (service *Service) Create(endpointGroup *portainer.EndpointGroup) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
endpointGroup.ID = portainer.EndpointGroupID(id) endpointGroup.ID = portainer.EndpointGroupID(id)

View file

@ -6,53 +6,12 @@ import (
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.EndpointGroup, portainer.EndpointGroupID]
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),
)
} }
// CreateEndpointGroup assign an ID to a new environment(endpoint) group and saves it. // CreateEndpointGroup assign an ID to a new environment(endpoint) group and saves it.
func (service ServiceTx) Create(endpointGroup *portainer.EndpointGroup) error { func (service ServiceTx) Create(endpointGroup *portainer.EndpointGroup) error {
return service.tx.CreateObject( return service.Tx.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
endpointGroup.ID = portainer.EndpointGroupID(id) endpointGroup.ID = portainer.EndpointGroupID(id)

View file

@ -5,18 +5,12 @@ import (
"github.com/portainer/portainer/api/dataservices" "github.com/portainer/portainer/api/dataservices"
) )
const ( // BucketName represents the name of the bucket where this service stores data.
// BucketName represents the name of the bucket where this service stores data. const BucketName = "fdo_profiles"
BucketName = "fdo_profiles"
)
// Service represents a service for managingFDO Profiles data. // Service represents a service for managingFDO Profiles data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.FDOProfile, portainer.FDOProfileID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -27,56 +21,23 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.FDOProfile, portainer.FDOProfileID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, 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. // Create assign an ID to a new FDO Profile and saves it.
func (service *Service) Create(FDOProfile *portainer.FDOProfile) error { func (service *Service) Create(FDOProfile *portainer.FDOProfile) error {
return service.connection.CreateObjectWithId( return service.Connection.CreateObjectWithId(
BucketName, BucketName,
int(FDOProfile.ID), int(FDOProfile.ID),
FDOProfile, 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. // GetNextIdentifier returns the next identifier for a FDO Profile.
func (service *Service) GetNextIdentifier() int { func (service *Service) GetNextIdentifier() int {
return service.connection.GetNextIdentifier(BucketName) return service.Connection.GetNextIdentifier(BucketName)
} }

View file

@ -10,11 +10,7 @@ const BucketName = "helm_user_repository"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.HelmUserRepository, portainer.HelmUserRepositoryID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -25,26 +21,18 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.HelmUserRepository, portainer.HelmUserRepositoryID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, 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. // 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) { func (service *Service) HelmUserRepositoryByUserID(userID portainer.UserID) ([]portainer.HelmUserRepository, error) {
var result = make([]portainer.HelmUserRepository, 0) var result = make([]portainer.HelmUserRepository, 0)
return result, service.connection.GetAll( return result, service.Connection.GetAll(
BucketName, BucketName,
&portainer.HelmUserRepository{}, &portainer.HelmUserRepository{},
dataservices.FilterFn(&result, func(e portainer.HelmUserRepository) bool { 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. // CreateHelmUserRepository creates a new HelmUserRepository object.
func (service *Service) Create(record *portainer.HelmUserRepository) error { func (service *Service) Create(record *portainer.HelmUserRepository) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
record.ID = portainer.HelmUserRepositoryID(id) 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)
}

View file

@ -37,7 +37,6 @@ type (
Webhook() WebhookService Webhook() WebhookService
} }
// DataStore defines the interface to manage the data
DataStore interface { DataStore interface {
Open() (newStore bool, err error) Open() (newStore bool, err error)
Init() error Init() error
@ -55,36 +54,22 @@ type (
// CustomTemplateService represents a service to manage custom templates // CustomTemplateService represents a service to manage custom templates
CustomTemplateService interface { CustomTemplateService interface {
BaseCRUD[portainer.CustomTemplate, portainer.CustomTemplateID]
GetNextIdentifier() int 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 represents a service to manage Edge groups
EdgeGroupService interface { EdgeGroupService interface {
EdgeGroups() ([]portainer.EdgeGroup, error) BaseCRUD[portainer.EdgeGroup, portainer.EdgeGroupID]
EdgeGroup(ID portainer.EdgeGroupID) (*portainer.EdgeGroup, error)
Create(group *portainer.EdgeGroup) error
UpdateEdgeGroup(ID portainer.EdgeGroupID, group *portainer.EdgeGroup) error
UpdateEdgeGroupFunc(ID portainer.EdgeGroupID, updateFunc func(group *portainer.EdgeGroup)) error 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 represents a service to manage Edge jobs
EdgeJobService interface { EdgeJobService interface {
EdgeJobs() ([]portainer.EdgeJob, error) BaseCRUD[portainer.EdgeJob, portainer.EdgeJobID]
EdgeJob(ID portainer.EdgeJobID) (*portainer.EdgeJob, error) CreateWithID(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error
Create(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error
UpdateEdgeJob(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error
UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc func(edgeJob *portainer.EdgeJob)) error UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc func(edgeJob *portainer.EdgeJob)) error
DeleteEdgeJob(ID portainer.EdgeJobID) error
GetNextIdentifier() int GetNextIdentifier() int
BucketName() string
} }
// EdgeStackService represents a service to manage Edge stacks // EdgeStackService represents a service to manage Edge stacks
@ -117,12 +102,7 @@ type (
// EndpointGroupService represents a service for managing environment(endpoint) group data // EndpointGroupService represents a service for managing environment(endpoint) group data
EndpointGroupService interface { EndpointGroupService interface {
EndpointGroup(ID portainer.EndpointGroupID) (*portainer.EndpointGroup, error) BaseCRUD[portainer.EndpointGroup, portainer.EndpointGroupID]
EndpointGroups() ([]portainer.EndpointGroup, error)
Create(group *portainer.EndpointGroup) error
UpdateEndpointGroup(ID portainer.EndpointGroupID, group *portainer.EndpointGroup) error
DeleteEndpointGroup(ID portainer.EndpointGroupID) error
BucketName() string
} }
// EndpointRelationService represents a service for managing environment(endpoint) relations data // EndpointRelationService represents a service for managing environment(endpoint) relations data
@ -137,23 +117,14 @@ type (
// FDOProfileService represents a service to manage FDO Profiles // FDOProfileService represents a service to manage FDO Profiles
FDOProfileService interface { FDOProfileService interface {
FDOProfiles() ([]portainer.FDOProfile, error) BaseCRUD[portainer.FDOProfile, portainer.FDOProfileID]
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
GetNextIdentifier() int GetNextIdentifier() int
BucketName() string
} }
// HelmUserRepositoryService represents a service to manage HelmUserRepositories // HelmUserRepositoryService represents a service to manage HelmUserRepositories
HelmUserRepositoryService interface { HelmUserRepositoryService interface {
HelmUserRepositories() ([]portainer.HelmUserRepository, error) BaseCRUD[portainer.HelmUserRepository, portainer.HelmUserRepositoryID]
HelmUserRepositoryByUserID(userID portainer.UserID) ([]portainer.HelmUserRepository, error) 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 // JWTService represents a service for managing JWT tokens
@ -167,40 +138,23 @@ type (
// RegistryService represents a service for managing registry data // RegistryService represents a service for managing registry data
RegistryService interface { RegistryService interface {
Registry(ID portainer.RegistryID) (*portainer.Registry, error) BaseCRUD[portainer.Registry, portainer.RegistryID]
Registries() ([]portainer.Registry, error)
Create(registry *portainer.Registry) error
UpdateRegistry(ID portainer.RegistryID, registry *portainer.Registry) error
DeleteRegistry(ID portainer.RegistryID) error
BucketName() string
} }
// ResourceControlService represents a service for managing resource control data // ResourceControlService represents a service for managing resource control data
ResourceControlService interface { ResourceControlService interface {
ResourceControl(ID portainer.ResourceControlID) (*portainer.ResourceControl, error) BaseCRUD[portainer.ResourceControl, portainer.ResourceControlID]
ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) 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 represents a service for managing user roles
RoleService interface { RoleService interface {
Role(ID portainer.RoleID) (*portainer.Role, error) BaseCRUD[portainer.Role, portainer.RoleID]
Roles() ([]portainer.Role, error)
Create(role *portainer.Role) error
UpdateRole(ID portainer.RoleID, role *portainer.Role) error
BucketName() string
} }
// APIKeyRepositoryService // APIKeyRepositoryService
APIKeyRepository interface { APIKeyRepository interface {
CreateAPIKey(key *portainer.APIKey) error BaseCRUD[portainer.APIKey, portainer.APIKeyID]
GetAPIKey(keyID portainer.APIKeyID) (*portainer.APIKey, error)
UpdateAPIKey(key *portainer.APIKey) error
DeleteAPIKey(ID portainer.APIKeyID) error
GetAPIKeysByUserID(userID portainer.UserID) ([]portainer.APIKey, error) GetAPIKeysByUserID(userID portainer.UserID) ([]portainer.APIKey, error)
GetAPIKeyByDigest(digest []byte) (*portainer.APIKey, error) GetAPIKeyByDigest(digest []byte) (*portainer.APIKey, error)
} }
@ -213,12 +167,7 @@ type (
} }
SnapshotService interface { SnapshotService interface {
Snapshot(endpointID portainer.EndpointID) (*portainer.Snapshot, error) BaseCRUD[portainer.Snapshot, portainer.EndpointID]
Snapshots() ([]portainer.Snapshot, error)
UpdateSnapshot(snapshot *portainer.Snapshot) error
DeleteSnapshot(endpointID portainer.EndpointID) error
Create(snapshot *portainer.Snapshot) error
BucketName() string
} }
// SSLSettingsService represents a service for managing application settings // SSLSettingsService represents a service for managing application settings
@ -230,53 +179,33 @@ type (
// StackService represents a service for managing stack data // StackService represents a service for managing stack data
StackService interface { StackService interface {
Stack(ID portainer.StackID) (*portainer.Stack, error) BaseCRUD[portainer.Stack, portainer.StackID]
StackByName(name string) (*portainer.Stack, error) StackByName(name string) (*portainer.Stack, error)
StacksByName(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 GetNextIdentifier() int
StackByWebhookID(ID string) (*portainer.Stack, error) StackByWebhookID(ID string) (*portainer.Stack, error)
RefreshableStacks() ([]portainer.Stack, error) RefreshableStacks() ([]portainer.Stack, error)
BucketName() string
} }
// TagService represents a service for managing tag data // TagService represents a service for managing tag data
TagService interface { TagService interface {
Tags() ([]portainer.Tag, error) BaseCRUD[portainer.Tag, portainer.TagID]
Tag(ID portainer.TagID) (*portainer.Tag, error)
Create(tag *portainer.Tag) error
UpdateTag(ID portainer.TagID, tag *portainer.Tag) error
UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error 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 represents a service for managing user data
TeamService interface { TeamService interface {
Team(ID portainer.TeamID) (*portainer.Team, error) BaseCRUD[portainer.Team, portainer.TeamID]
TeamByName(name string) (*portainer.Team, error) 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 represents a service for managing team membership data
TeamMembershipService interface { TeamMembershipService interface {
TeamMembership(ID portainer.TeamMembershipID) (*portainer.TeamMembership, error) BaseCRUD[portainer.TeamMembership, portainer.TeamMembershipID]
TeamMemberships() ([]portainer.TeamMembership, error)
TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error) TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error)
TeamMembershipsByTeamID(teamID portainer.TeamID) ([]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 DeleteTeamMembershipByUserID(userID portainer.UserID) error
DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error
BucketName() string
DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error
} }
@ -289,34 +218,24 @@ type (
// UserService represents a service for managing user data // UserService represents a service for managing user data
UserService interface { UserService interface {
User(ID portainer.UserID) (*portainer.User, error) BaseCRUD[portainer.User, portainer.UserID]
UserByUsername(username string) (*portainer.User, error) UserByUsername(username string) (*portainer.User, error)
Users() ([]portainer.User, error)
UsersByRole(role portainer.UserRole) ([]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 represents a service for managing version data
VersionService interface { VersionService interface {
Edition() (portainer.SoftwareEdition, error)
InstanceID() (string, error) InstanceID() (string, error)
UpdateInstanceID(ID string) error UpdateInstanceID(ID string) error
Edition() (portainer.SoftwareEdition, error)
Version() (*models.Version, error) Version() (*models.Version, error)
UpdateVersion(*models.Version) error UpdateVersion(*models.Version) error
} }
// WebhookService represents a service for managing webhook data. // WebhookService represents a service for managing webhook data.
WebhookService interface { WebhookService interface {
Webhooks() ([]portainer.Webhook, error) BaseCRUD[portainer.Webhook, portainer.WebhookID]
Webhook(ID portainer.WebhookID) (*portainer.Webhook, error)
Create(portainer *portainer.Webhook) error
UpdateWebhook(ID portainer.WebhookID, webhook *portainer.Webhook) error
WebhookByResourceID(resourceID string) (*portainer.Webhook, error) WebhookByResourceID(resourceID string) (*portainer.Webhook, error)
WebhookByToken(token string) (*portainer.Webhook, error) WebhookByToken(token string) (*portainer.Webhook, error)
DeleteWebhook(ID portainer.WebhookID) error
BucketName() string
} }
) )

View file

@ -10,11 +10,7 @@ const BucketName = "registries"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.Registry, portainer.RegistryID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -25,44 +21,26 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.Registry, portainer.RegistryID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Registry, portainer.RegistryID]{
tx: tx, 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, &registry)
if err != nil {
return nil, err
}
return &registry, 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(&registries),
)
}
// Create creates a new registry. // Create creates a new registry.
func (service *Service) Create(registry *portainer.Registry) error { func (service *Service) Create(registry *portainer.Registry) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
registry.ID = portainer.RegistryID(id) 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)
}

View file

@ -6,41 +6,12 @@ import (
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.Registry, portainer.RegistryID]
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, &registry)
if err != nil {
return nil, err
}
return &registry, 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(&registries),
)
} }
// Create creates a new registry. // Create creates a new registry.
func (service ServiceTx) Create(registry *portainer.Registry) error { func (service ServiceTx) Create(registry *portainer.Registry) error {
return service.tx.CreateObject( return service.Tx.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
registry.ID = portainer.RegistryID(id) 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)
}

View file

@ -15,11 +15,7 @@ const BucketName = "resource_control"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.ResourceControl, portainer.ResourceControlID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -30,44 +26,37 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.ResourceControl, portainer.ResourceControlID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.ResourceControl, portainer.ResourceControlID]{
tx: tx, 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 // 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 // to the main ResourceID or in SubResourceIDs. It also performs a check on the resource type. Return nil
// if no ResourceControl was found. // if no ResourceControl was found.
func (service *Service) ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) { func (service *Service) ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) {
var resourceControl *portainer.ResourceControl var resourceControl *portainer.ResourceControl
stop := fmt.Errorf("ok") stop := fmt.Errorf("ok")
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.ResourceControl{}, &portainer.ResourceControl{},
func(obj interface{}) (interface{}, error) { func(obj interface{}) (interface{}, error) {
rc, ok := obj.(*portainer.ResourceControl) rc, ok := obj.(*portainer.ResourceControl)
if !ok { if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object") 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 { if rc.ResourceID == resourceID && rc.Type == resourceType {
@ -91,20 +80,9 @@ func (service *Service) ResourceControlByResourceIDAndType(resourceID string, re
return nil, err 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 // CreateResourceControl creates a new ResourceControl object
func (service *Service) Create(resourceControl *portainer.ResourceControl) error { func (service *Service) Create(resourceControl *portainer.ResourceControl) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
resourceControl.ID = portainer.ResourceControlID(id) 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)
}

View file

@ -11,25 +11,7 @@ import (
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.ResourceControl, portainer.ResourceControlID]
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
} }
// ResourceControlByResourceIDAndType returns a ResourceControl object by checking if the resourceID is equal // 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) { func (service ServiceTx) ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) {
var resourceControl *portainer.ResourceControl var resourceControl *portainer.ResourceControl
stop := fmt.Errorf("ok") stop := fmt.Errorf("ok")
err := service.tx.GetAll( err := service.Tx.GetAll(
BucketName, BucketName,
&portainer.ResourceControl{}, &portainer.ResourceControl{},
func(obj interface{}) (interface{}, error) { func(obj interface{}) (interface{}, error) {
rc, ok := obj.(*portainer.ResourceControl) rc, ok := obj.(*portainer.ResourceControl)
if !ok { if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object") 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 { if rc.ResourceID == resourceID && rc.Type == resourceType {
@ -69,20 +51,9 @@ func (service ServiceTx) ResourceControlByResourceIDAndType(resourceID string, r
return nil, err 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 // CreateResourceControl creates a new ResourceControl object
func (service ServiceTx) Create(resourceControl *portainer.ResourceControl) error { func (service ServiceTx) Create(resourceControl *portainer.ResourceControl) error {
return service.tx.CreateObject( return service.Tx.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
resourceControl.ID = portainer.ResourceControlID(id) 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)
}

View file

@ -10,11 +10,7 @@ const BucketName = "roles"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.Role, portainer.RoleID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -25,44 +21,26 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.Role, portainer.RoleID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Role, portainer.RoleID]{
tx: tx, 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. // CreateRole creates a new Role.
func (service *Service) Create(role *portainer.Role) error { func (service *Service) Create(role *portainer.Role) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
role.ID = portainer.RoleID(id) 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)
}

View file

@ -5,43 +5,13 @@ import (
"github.com/portainer/portainer/api/dataservices" "github.com/portainer/portainer/api/dataservices"
) )
// Service represents a service for managing environment(endpoint) data.
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.Role, portainer.RoleID]
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),
)
} }
// CreateRole creates a new Role. // CreateRole creates a new Role.
func (service ServiceTx) Create(role *portainer.Role) error { func (service ServiceTx) Create(role *portainer.Role) error {
return service.tx.CreateObject( return service.Tx.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
role.ID = portainer.RoleID(id) 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)
}

View file

@ -10,11 +10,7 @@ const (
) )
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.Snapshot, portainer.EndpointID]
}
func (service *Service) BucketName() string {
return BucketName
} }
func NewService(connection portainer.Connection) (*Service, error) { func NewService(connection portainer.Connection) (*Service, error) {
@ -24,49 +20,23 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.Snapshot, portainer.EndpointID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Snapshot, portainer.EndpointID]{
tx: tx, 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 { 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)
} }

View file

@ -6,46 +6,9 @@ import (
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.Snapshot, portainer.EndpointID]
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)
} }
func (service ServiceTx) Create(snapshot *portainer.Snapshot) error { 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)
} }

View file

@ -14,11 +14,7 @@ const BucketName = "stacks"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.Stack, portainer.StackID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -29,28 +25,18 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.Stack, portainer.StackID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, 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. // StackByName returns a stack object by name.
func (service *Service) StackByName(name string) (*portainer.Stack, error) { func (service *Service) StackByName(name string) (*portainer.Stack, error) {
var s portainer.Stack var s portainer.Stack
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.Stack{}, &portainer.Stack{},
dataservices.FirstFn(&s, func(e portainer.Stack) bool { 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) { func (service *Service) StacksByName(name string) ([]portainer.Stack, error) {
var stacks = make([]portainer.Stack, 0) var stacks = make([]portainer.Stack, 0)
return stacks, service.connection.GetAll( return stacks, service.Connection.GetAll(
BucketName, BucketName,
&portainer.Stack{}, &portainer.Stack{},
dataservices.FilterFn(&stacks, func(e portainer.Stack) bool { 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. // GetNextIdentifier returns the next identifier for a stack.
func (service *Service) GetNextIdentifier() int { func (service *Service) GetNextIdentifier() int {
return service.connection.GetNextIdentifier(BucketName) return service.Connection.GetNextIdentifier(BucketName)
} }
// CreateStack creates a new stack. // CreateStack creates a new stack.
func (service *Service) Create(stack *portainer.Stack) error { func (service *Service) Create(stack *portainer.Stack) error {
return service.connection.CreateObjectWithId(BucketName, int(stack.ID), stack) 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)
} }
// StackByWebhookID returns a pointer to a stack object by webhook ID. // 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) { func (service *Service) StackByWebhookID(id string) (*portainer.Stack, error) {
var s portainer.Stack var s portainer.Stack
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.Stack{}, &portainer.Stack{},
dataservices.FirstFn(&s, func(e portainer.Stack) bool { 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) { func (service *Service) RefreshableStacks() ([]portainer.Stack, error) {
stacks := make([]portainer.Stack, 0) stacks := make([]portainer.Stack, 0)
return stacks, service.connection.GetAll( return stacks, service.Connection.GetAll(
BucketName, BucketName,
&portainer.Stack{}, &portainer.Stack{},
dataservices.FilterFn(&stacks, func(e portainer.Stack) bool { dataservices.FilterFn(&stacks, func(e portainer.Stack) bool {

View file

@ -12,11 +12,7 @@ const (
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.Tag, portainer.TagID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -27,44 +23,26 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.Tag, portainer.TagID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.Tag, portainer.TagID]{
tx: tx, 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. // CreateTag creates a new tag.
func (service *Service) Create(tag *portainer.Tag) error { func (service *Service) Create(tag *portainer.Tag) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
tag.ID = portainer.TagID(id) 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. // UpdateTagFunc updates a tag inside a transaction avoiding data races.
func (service *Service) UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error { 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{} tag := &portainer.Tag{}
return service.connection.UpdateObjectFunc(BucketName, id, tag, func() { return service.Connection.UpdateObjectFunc(BucketName, id, tag, func() {
updateFunc(tag) 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)
}

View file

@ -8,41 +8,12 @@ import (
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.Tag, portainer.TagID]
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
} }
// CreateTag creates a new tag. // CreateTag creates a new tag.
func (service ServiceTx) Create(tag *portainer.Tag) error { func (service ServiceTx) Create(tag *portainer.Tag) error {
return service.tx.CreateObject( return service.Tx.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
tag.ID = portainer.TagID(id) 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 // UpdateTagFunc is a no-op inside a transaction
func (service ServiceTx) UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error { func (service ServiceTx) UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error {
return errors.New("cannot be called inside a transaction") 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)
}

View file

@ -14,11 +14,7 @@ const BucketName = "teams"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.Team, portainer.TeamID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -29,28 +25,18 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.Team, portainer.TeamID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, 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. // TeamByName returns a team by name.
func (service *Service) TeamByName(name string) (*portainer.Team, error) { func (service *Service) TeamByName(name string) (*portainer.Team, error) {
var t portainer.Team var t portainer.Team
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.Team{}, &portainer.Team{},
dataservices.FirstFn(&t, func(e portainer.Team) bool { dataservices.FirstFn(&t, func(e portainer.Team) bool {
@ -69,26 +55,9 @@ func (service *Service) TeamByName(name string) (*portainer.Team, error) {
return nil, err 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. // CreateTeam creates a new Team.
func (service *Service) Create(team *portainer.Team) error { func (service *Service) Create(team *portainer.Team) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
team.ID = portainer.TeamID(id) 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)
}

View file

@ -14,11 +14,7 @@ const BucketName = "team_membership"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.TeamMembership, portainer.TeamMembershipID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -29,46 +25,28 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.TeamMembership, portainer.TeamMembershipID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, nil
} }
func (service *Service) Tx(tx portainer.Transaction) ServiceTx { func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
return ServiceTx{ return ServiceTx{
service: service, BaseDataServiceTx: dataservices.BaseDataServiceTx[portainer.TeamMembership, portainer.TeamMembershipID]{
tx: tx, 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. // 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) { func (service *Service) TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error) {
var memberships = make([]portainer.TeamMembership, 0) var memberships = make([]portainer.TeamMembership, 0)
return memberships, service.connection.GetAll( return memberships, service.Connection.GetAll(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { 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) { func (service *Service) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]portainer.TeamMembership, error) {
var memberships = make([]portainer.TeamMembership, 0) var memberships = make([]portainer.TeamMembership, 0)
return memberships, service.connection.GetAll( return memberships, service.Connection.GetAll(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { 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. // CreateTeamMembership creates a new TeamMembership object.
func (service *Service) Create(membership *portainer.TeamMembership) error { func (service *Service) Create(membership *portainer.TeamMembership) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
membership.ID = portainer.TeamMembershipID(id) 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. // DeleteTeamMembershipByUserID deletes all the TeamMembership object associated to a UserID.
func (service *Service) DeleteTeamMembershipByUserID(userID portainer.UserID) error { func (service *Service) DeleteTeamMembershipByUserID(userID portainer.UserID) error {
return service.connection.DeleteAllObjects( return service.Connection.DeleteAllObjects(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) { 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. // DeleteTeamMembershipByTeamID deletes all the TeamMembership object associated to a TeamID.
func (service *Service) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error { func (service *Service) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error {
return service.connection.DeleteAllObjects( return service.Connection.DeleteAllObjects(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) { 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 { func (service *Service) DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error {
return service.connection.DeleteAllObjects( return service.Connection.DeleteAllObjects(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) { func(obj interface{}) (id int, ok bool) {

View file

@ -10,43 +10,14 @@ import (
) )
type ServiceTx struct { type ServiceTx struct {
service *Service dataservices.BaseDataServiceTx[portainer.TeamMembership, portainer.TeamMembershipID]
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),
)
} }
// TeamMembershipsByUserID return an array containing all the TeamMembership objects where the specified userID is present. // 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) { func (service ServiceTx) TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error) {
var memberships = make([]portainer.TeamMembership, 0) var memberships = make([]portainer.TeamMembership, 0)
return memberships, service.tx.GetAll( return memberships, service.Tx.GetAll(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { 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) { func (service ServiceTx) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]portainer.TeamMembership, error) {
var memberships = make([]portainer.TeamMembership, 0) var memberships = make([]portainer.TeamMembership, 0)
return memberships, service.tx.GetAll( return memberships, service.Tx.GetAll(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
dataservices.FilterFn(&memberships, func(e portainer.TeamMembership) bool { 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. // CreateTeamMembership creates a new TeamMembership object.
func (service ServiceTx) Create(membership *portainer.TeamMembership) error { func (service ServiceTx) Create(membership *portainer.TeamMembership) error {
return service.tx.CreateObject( return service.Tx.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
membership.ID = portainer.TeamMembershipID(id) 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. // DeleteTeamMembershipByUserID deletes all the TeamMembership object associated to a UserID.
func (service ServiceTx) DeleteTeamMembershipByUserID(userID portainer.UserID) error { func (service ServiceTx) DeleteTeamMembershipByUserID(userID portainer.UserID) error {
return service.tx.DeleteAllObjects( return service.Tx.DeleteAllObjects(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) { 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. // DeleteTeamMembershipByTeamID deletes all the TeamMembership object associated to a TeamID.
func (service ServiceTx) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error { func (service ServiceTx) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error {
return service.tx.DeleteAllObjects( return service.Tx.DeleteAllObjects(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) { 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 { func (service ServiceTx) DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error {
return service.tx.DeleteAllObjects( return service.Tx.DeleteAllObjects(
BucketName, BucketName,
&portainer.TeamMembership{}, &portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) { func(obj interface{}) (id int, ok bool) {

View file

@ -14,11 +14,7 @@ const BucketName = "users"
// Service represents a service for managing environment(endpoint) data. // Service represents a service for managing environment(endpoint) data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.User, portainer.UserID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -29,28 +25,18 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.User, portainer.UserID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, 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. // UserByUsername returns a user by username.
func (service *Service) UserByUsername(username string) (*portainer.User, error) { func (service *Service) UserByUsername(username string) (*portainer.User, error) {
var u portainer.User var u portainer.User
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.User{}, &portainer.User{},
dataservices.FirstFn(&u, func(e portainer.User) bool { dataservices.FirstFn(&u, func(e portainer.User) bool {
@ -69,22 +55,11 @@ func (service *Service) UserByUsername(username string) (*portainer.User, error)
return nil, err 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. // UsersByRole return an array containing all the users with the specified role.
func (service *Service) UsersByRole(role portainer.UserRole) ([]portainer.User, error) { func (service *Service) UsersByRole(role portainer.UserRole) ([]portainer.User, error) {
var users = make([]portainer.User, 0) var users = make([]portainer.User, 0)
return users, service.connection.GetAll( return users, service.Connection.GetAll(
BucketName, BucketName,
&portainer.User{}, &portainer.User{},
dataservices.FilterFn(&users, func(e portainer.User) bool { 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. // CreateUser creates a new user.
func (service *Service) Create(user *portainer.User) error { func (service *Service) Create(user *portainer.User) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
user.ID = portainer.UserID(id) 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)
}

View file

@ -13,11 +13,7 @@ const BucketName = "webhooks"
// Service represents a service for managing webhook data. // Service represents a service for managing webhook data.
type Service struct { type Service struct {
connection portainer.Connection dataservices.BaseDataService[portainer.Webhook, portainer.WebhookID]
}
func (service *Service) BucketName() string {
return BucketName
} }
// NewService creates a new instance of a service. // NewService creates a new instance of a service.
@ -28,39 +24,18 @@ func NewService(connection portainer.Connection) (*Service, error) {
} }
return &Service{ return &Service{
connection: connection, BaseDataService: dataservices.BaseDataService[portainer.Webhook, portainer.WebhookID]{
Bucket: BucketName,
Connection: connection,
},
}, nil }, 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. // WebhookByResourceID returns a webhook by the ResourceID it is associated with.
func (service *Service) WebhookByResourceID(ID string) (*portainer.Webhook, error) { func (service *Service) WebhookByResourceID(ID string) (*portainer.Webhook, error) {
var w portainer.Webhook var w portainer.Webhook
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.Webhook{}, &portainer.Webhook{},
dataservices.FirstFn(&w, func(e portainer.Webhook) bool { 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) { func (service *Service) WebhookByToken(token string) (*portainer.Webhook, error) {
var w portainer.Webhook var w portainer.Webhook
err := service.connection.GetAll( err := service.Connection.GetAll(
BucketName, BucketName,
&portainer.Webhook{}, &portainer.Webhook{},
dataservices.FirstFn(&w, func(e portainer.Webhook) bool { dataservices.FirstFn(&w, func(e portainer.Webhook) bool {
@ -102,15 +77,9 @@ func (service *Service) WebhookByToken(token string) (*portainer.Webhook, error)
return nil, err 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. // CreateWebhook assign an ID to a new webhook and saves it.
func (service *Service) Create(webhook *portainer.Webhook) error { func (service *Service) Create(webhook *portainer.Webhook) error {
return service.connection.CreateObject( return service.Connection.CreateObject(
BucketName, BucketName,
func(id uint64) (int, interface{}) { func(id uint64) (int, interface{}) {
webhook.ID = portainer.WebhookID(id) 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)
}

View file

@ -316,7 +316,7 @@ func (store *Store) testCustomTemplates(t *testing.T) {
customTemplate.Create(expectedTemplate) 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.NoError(err, "CustomTemplate should not return an error")
is.Equal(expectedTemplate, actualTemplate, "expected and actual template do not match") 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) err = regService.Create(reg2)
is.NoError(err) is.NoError(err)
actualReg1, err := regService.Registry(reg1.ID) actualReg1, err := regService.Read(reg1.ID)
is.NoError(err) is.NoError(err)
is.Equal(reg1, actualReg1, "registries differ") is.Equal(reg1, actualReg1, "registries differ")
actualReg2, err := regService.Registry(reg2.ID) actualReg2, err := regService.Read(reg2.ID)
is.NoError(err) is.NoError(err)
is.Equal(reg2, actualReg2, "registries differ") is.Equal(reg2, actualReg2, "registries differ")
} }
@ -406,11 +406,11 @@ func (store *Store) testTags(t *testing.T) {
err = tags.Create(tag2) err = tags.Create(tag2)
is.NoError(err, "Tags.Create should succeed") 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.NoError(err, "tag1 should be found")
is.Equal(tag1, actual, "tags differ") 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.NoError(err, "tag2 should be found")
is.Equal(tag2, actual, "tags differ") is.Equal(tag2, actual, "tags differ")
} }

View file

@ -22,7 +22,6 @@ func (store *Store) Init() error {
} }
func (store *Store) checkOrCreateDefaultSettings() error { func (store *Store) checkOrCreateDefaultSettings() error {
isDDExtention := false isDDExtention := false
if _, ok := os.LookupEnv("DOCKER_EXTENSION"); ok { if _, ok := os.LookupEnv("DOCKER_EXTENSION"); ok {
isDDExtention = true isDDExtention = true
@ -73,6 +72,7 @@ func (store *Store) checkOrCreateDefaultSettings() error {
settings.UserSessionTimeout = portainer.DefaultUserSessionTimeout settings.UserSessionTimeout = portainer.DefaultUserSessionTimeout
return store.Settings().UpdateSettings(settings) return store.Settings().UpdateSettings(settings)
} }
return nil return nil
} }
@ -90,7 +90,7 @@ func (store *Store) checkOrCreateDefaultSSLSettings() error {
} }
func (store *Store) checkOrCreateDefaultData() error { func (store *Store) checkOrCreateDefaultData() error {
groups, err := store.EndpointGroupService.EndpointGroups() groups, err := store.EndpointGroupService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -110,5 +110,6 @@ func (store *Store) checkOrCreateDefaultData() error {
return err return err
} }
} }
return nil return nil
} }

View file

@ -31,22 +31,22 @@ func TestMigrateStackEntryPoint(t *testing.T) {
assert.NoError(t, err, "failed to create stack") assert.NoError(t, err, "failed to create stack")
} }
s, err := stackService.Stack(1) s, err := stackService.Read(1)
assert.NoError(t, err) assert.NoError(t, err)
assert.Nil(t, s.GitConfig, "first stack should not have git config") 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.NoError(t, err)
assert.Equal(t, "", s.GitConfig.ConfigFilePath, "not migrated yet migrated") assert.Equal(t, "", s.GitConfig.ConfigFilePath, "not migrated yet migrated")
err = migrator.MigrateStackEntryPoint(stackService) err = migrator.MigrateStackEntryPoint(stackService)
assert.NoError(t, err, "failed to migrate entry point to Git ConfigFilePath") 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.NoError(t, err)
assert.Nil(t, s.GitConfig, "first stack should not have git config") 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.NoError(t, err)
assert.Equal(t, "dir/sub/compose.yml", s.GitConfig.ConfigFilePath, "second stack should have config file path migrated") assert.Equal(t, "dir/sub/compose.yml", s.GitConfig.ConfigFilePath, "second stack should have config file path migrated")
} }

View file

@ -9,7 +9,7 @@ import (
func (m *Migrator) updateUsersToDBVersion18() error { func (m *Migrator) updateUsersToDBVersion18() error {
log.Info().Msg("updating users") log.Info().Msg("updating users")
legacyUsers, err := m.userService.Users() legacyUsers, err := m.userService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -33,7 +33,7 @@ func (m *Migrator) updateUsersToDBVersion18() error {
portainer.OperationPortainerUserMemberships: true, portainer.OperationPortainerUserMemberships: true,
} }
err = m.userService.UpdateUser(user.ID, &user) err = m.userService.Update(user.ID, &user)
if err != nil { if err != nil {
return err return err
} }
@ -77,7 +77,7 @@ func (m *Migrator) updateEndpointsToDBVersion18() error {
func (m *Migrator) updateEndpointGroupsToDBVersion18() error { func (m *Migrator) updateEndpointGroupsToDBVersion18() error {
log.Info().Msg("updating endpoint groups") log.Info().Msg("updating endpoint groups")
legacyEndpointGroups, err := m.endpointGroupService.EndpointGroups() legacyEndpointGroups, err := m.endpointGroupService.ReadAll()
if err != nil { if err != nil {
return err 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 { if err != nil {
return err return err
} }
@ -109,7 +109,7 @@ func (m *Migrator) updateEndpointGroupsToDBVersion18() error {
func (m *Migrator) updateRegistriesToDBVersion18() error { func (m *Migrator) updateRegistriesToDBVersion18() error {
log.Info().Msg("updating registries") log.Info().Msg("updating registries")
legacyRegistries, err := m.registryService.Registries() legacyRegistries, err := m.registryService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -125,7 +125,7 @@ func (m *Migrator) updateRegistriesToDBVersion18() error {
registry.TeamAccessPolicies[teamID] = portainer.AccessPolicy{} registry.TeamAccessPolicies[teamID] = portainer.AccessPolicy{}
} }
err = m.registryService.UpdateRegistry(registry.ID, &registry) err = m.registryService.Update(registry.ID, &registry)
if err != nil { if err != nil {
return err return err
} }

View file

@ -10,7 +10,7 @@ import (
func (m *Migrator) updateResourceControlsToDBVersion22() error { func (m *Migrator) updateResourceControlsToDBVersion22() error {
log.Info().Msg("updating resource controls") log.Info().Msg("updating resource controls")
legacyResourceControls, err := m.resourceControlService.ResourceControls() legacyResourceControls, err := m.resourceControlService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -18,7 +18,7 @@ func (m *Migrator) updateResourceControlsToDBVersion22() error {
for _, resourceControl := range legacyResourceControls { for _, resourceControl := range legacyResourceControls {
resourceControl.AdministratorsOnly = false resourceControl.AdministratorsOnly = false
err := m.resourceControlService.UpdateResourceControl(resourceControl.ID, &resourceControl) err := m.resourceControlService.Update(resourceControl.ID, &resourceControl)
if err != nil { if err != nil {
return err return err
} }
@ -30,7 +30,7 @@ func (m *Migrator) updateResourceControlsToDBVersion22() error {
func (m *Migrator) updateUsersAndRolesToDBVersion22() error { func (m *Migrator) updateUsersAndRolesToDBVersion22() error {
log.Info().Msg("updating users and roles") log.Info().Msg("updating users and roles")
legacyUsers, err := m.userService.Users() legacyUsers, err := m.userService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -42,47 +42,47 @@ func (m *Migrator) updateUsersAndRolesToDBVersion22() error {
for _, user := range legacyUsers { for _, user := range legacyUsers {
user.PortainerAuthorizations = authorization.DefaultPortainerAuthorizations() user.PortainerAuthorizations = authorization.DefaultPortainerAuthorizations()
err = m.userService.UpdateUser(user.ID, &user) err = m.userService.Update(user.ID, &user)
if err != nil { if err != nil {
return err return err
} }
} }
endpointAdministratorRole, err := m.roleService.Role(portainer.RoleID(1)) endpointAdministratorRole, err := m.roleService.Read(portainer.RoleID(1))
if err != nil { if err != nil {
return err return err
} }
endpointAdministratorRole.Priority = 1 endpointAdministratorRole.Priority = 1
endpointAdministratorRole.Authorizations = authorization.DefaultEndpointAuthorizationsForEndpointAdministratorRole() 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 { if err != nil {
return err return err
} }
helpDeskRole.Priority = 2 helpDeskRole.Priority = 2
helpDeskRole.Authorizations = authorization.DefaultEndpointAuthorizationsForHelpDeskRole(settings.AllowVolumeBrowserForRegularUsers) 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 { if err != nil {
return err return err
} }
standardUserRole.Priority = 3 standardUserRole.Priority = 3
standardUserRole.Authorizations = authorization.DefaultEndpointAuthorizationsForStandardUserRole(settings.AllowVolumeBrowserForRegularUsers) 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 { if err != nil {
return err return err
} }
readOnlyUserRole.Priority = 4 readOnlyUserRole.Priority = 4
readOnlyUserRole.Authorizations = authorization.DefaultEndpointAuthorizationsForReadOnlyUserRole(settings.AllowVolumeBrowserForRegularUsers) readOnlyUserRole.Authorizations = authorization.DefaultEndpointAuthorizationsForReadOnlyUserRole(settings.AllowVolumeBrowserForRegularUsers)
err = m.roleService.UpdateRole(readOnlyUserRole.ID, readOnlyUserRole) err = m.roleService.Update(readOnlyUserRole.ID, readOnlyUserRole)
if err != nil { if err != nil {
return err return err
} }

View file

@ -9,7 +9,7 @@ import (
func (m *Migrator) updateTagsToDBVersion23() error { func (m *Migrator) updateTagsToDBVersion23() error {
log.Info().Msg("updating tags") log.Info().Msg("updating tags")
tags, err := m.tagService.Tags() tags, err := m.tagService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -17,7 +17,7 @@ func (m *Migrator) updateTagsToDBVersion23() error {
for _, tag := range tags { for _, tag := range tags {
tag.EndpointGroups = make(map[portainer.EndpointGroupID]bool) tag.EndpointGroups = make(map[portainer.EndpointGroupID]bool)
tag.Endpoints = make(map[portainer.EndpointID]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 { if err != nil {
return err return err
} }
@ -29,7 +29,7 @@ func (m *Migrator) updateTagsToDBVersion23() error {
func (m *Migrator) updateEndpointsAndEndpointGroupsToDBVersion23() error { func (m *Migrator) updateEndpointsAndEndpointGroupsToDBVersion23() error {
log.Info().Msg("updating endpoints and endpoint groups") log.Info().Msg("updating endpoints and endpoint groups")
tags, err := m.tagService.Tags() tags, err := m.tagService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -70,7 +70,7 @@ func (m *Migrator) updateEndpointsAndEndpointGroupsToDBVersion23() error {
} }
} }
endpointGroups, err := m.endpointGroupService.EndpointGroups() endpointGroups, err := m.endpointGroupService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -85,14 +85,14 @@ func (m *Migrator) updateEndpointsAndEndpointGroupsToDBVersion23() error {
} }
} }
endpointGroup.TagIDs = endpointGroupTags endpointGroup.TagIDs = endpointGroupTags
err = m.endpointGroupService.UpdateEndpointGroup(endpointGroup.ID, &endpointGroup) err = m.endpointGroupService.Update(endpointGroup.ID, &endpointGroup)
if err != nil { if err != nil {
return err return err
} }
} }
for _, tag := range tagsNameMap { for _, tag := range tagsNameMap {
err = m.tagService.UpdateTag(tag.ID, &tag) err = m.tagService.Update(tag.ID, &tag)
if err != nil { if err != nil {
return err return err
} }

View file

@ -24,7 +24,7 @@ func (m *Migrator) updateSettingsToDB24() error {
func (m *Migrator) updateStacksToDB24() error { func (m *Migrator) updateStacksToDB24() error {
log.Info().Msg("updating stacks") log.Info().Msg("updating stacks")
stacks, err := m.stackService.Stacks() stacks, err := m.stackService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -32,7 +32,7 @@ func (m *Migrator) updateStacksToDB24() error {
for idx := range stacks { for idx := range stacks {
stack := &stacks[idx] stack := &stacks[idx]
stack.Status = portainer.StackStatusActive stack.Status = portainer.StackStatusActive
err := m.stackService.UpdateStack(stack.ID, stack) err := m.stackService.Update(stack.ID, stack)
if err != nil { if err != nil {
return err return err
} }

View file

@ -11,7 +11,7 @@ import (
func (m *Migrator) updateStackResourceControlToDB27() error { func (m *Migrator) updateStackResourceControlToDB27() error {
log.Info().Msg("updating stack resource controls") log.Info().Msg("updating stack resource controls")
resourceControls, err := m.resourceControlService.ResourceControls() resourceControls, err := m.resourceControlService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -34,7 +34,7 @@ func (m *Migrator) updateStackResourceControlToDB27() error {
resource.ResourceID = stackutils.ResourceControlID(stack.EndpointID, stack.Name) 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 { if err != nil {
return err return err
} }

View file

@ -41,7 +41,7 @@ func (m *Migrator) migrateDBVersionToDB32() error {
func (m *Migrator) updateRegistriesToDB32() error { func (m *Migrator) updateRegistriesToDB32() error {
log.Info().Msg("updating registries") log.Info().Msg("updating registries")
registries, err := m.registryService.Registries() registries, err := m.registryService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -77,7 +77,7 @@ func (m *Migrator) updateRegistriesToDB32() error {
Namespaces: []string{}, Namespaces: []string{},
} }
} }
m.registryService.UpdateRegistry(registry.ID, &registry) m.registryService.Update(registry.ID, &registry)
} }
return nil return nil
} }
@ -111,7 +111,7 @@ func (m *Migrator) updateDockerhubToDB32() error {
// we only have one migrated registry entry. Duplicates will be removed // we only have one migrated registry entry. Duplicates will be removed
// if they exist and which has been happening due to earlier migration bugs // if they exist and which has been happening due to earlier migration bugs
migrated := false migrated := false
registries, _ := m.registryService.Registries() registries, _ := m.registryService.ReadAll()
for _, r := range registries { for _, r := range registries {
if r.Type == registry.Type && if r.Type == registry.Type &&
r.Name == registry.Name && r.Name == registry.Name &&
@ -123,7 +123,7 @@ func (m *Migrator) updateDockerhubToDB32() error {
migrated = true migrated = true
} else { } else {
// delete subsequent duplicates // 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) return fmt.Errorf("failed fetching environments: %w", err)
} }
resourceControls, err := m.resourceControlService.ResourceControls() resourceControls, err := m.resourceControlService.ReadAll()
if err != nil { if err != nil {
return fmt.Errorf("failed fetching resource controls: %w", err) 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 { if newResourceID, ok := toUpdate[resourceControl.ID]; ok {
resourceControl.ResourceID = newResourceID resourceControl.ResourceID = newResourceID
err := m.resourceControlService.UpdateResourceControl(resourceControl.ID, resourceControl) err := m.resourceControlService.Update(resourceControl.ID, resourceControl)
if err != nil { if err != nil {
return fmt.Errorf("failed updating resource control %d: %w", resourceControl.ID, err) return fmt.Errorf("failed updating resource control %d: %w", resourceControl.ID, err)
} }
} else { } else {
err := m.resourceControlService.DeleteResourceControl(resourceControl.ID) err := m.resourceControlService.Delete(resourceControl.ID)
if err != nil { if err != nil {
return fmt.Errorf("failed deleting resource control %d: %w", resourceControl.ID, err) return fmt.Errorf("failed deleting resource control %d: %w", resourceControl.ID, err)
} }

View file

@ -14,7 +14,7 @@ func (m *Migrator) migrateDBVersionToDB34() error {
// MigrateStackEntryPoint exported for testing // MigrateStackEntryPoint exported for testing
func MigrateStackEntryPoint(stackService dataservices.StackService) error { func MigrateStackEntryPoint(stackService dataservices.StackService) error {
stacks, err := stackService.Stacks() stacks, err := stackService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -26,7 +26,7 @@ func MigrateStackEntryPoint(stackService dataservices.StackService) error {
} }
stack.GitConfig.ConfigFilePath = stack.EntryPoint 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 return err
} }
} }

View file

@ -16,7 +16,7 @@ func (m *Migrator) migrateDBVersionToDB36() error {
func (m *Migrator) migrateUsersToDB36() error { func (m *Migrator) migrateUsersToDB36() error {
log.Info().Msg("updating user authorizations") log.Info().Msg("updating user authorizations")
users, err := m.userService.Users() users, err := m.userService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -27,7 +27,7 @@ func (m *Migrator) migrateUsersToDB36() error {
currentAuthorizations[portainer.OperationPortainerUserCreateToken] = true currentAuthorizations[portainer.OperationPortainerUserCreateToken] = true
currentAuthorizations[portainer.OperationPortainerUserRevokeToken] = true currentAuthorizations[portainer.OperationPortainerUserRevokeToken] = true
user.PortainerAuthorizations = currentAuthorizations user.PortainerAuthorizations = currentAuthorizations
err = m.userService.UpdateUser(user.ID, &user) err = m.userService.Update(user.ID, &user)
if err != nil { if err != nil {
return err return err
} }

View file

@ -9,7 +9,7 @@ import (
func (m *Migrator) migrateDBVersionToDB71() error { func (m *Migrator) migrateDBVersionToDB71() error {
log.Info().Msg("removing orphaned snapshots") log.Info().Msg("removing orphaned snapshots")
snapshots, err := m.snapshotService.Snapshots() snapshots, err := m.snapshotService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -26,7 +26,7 @@ func (m *Migrator) migrateDBVersionToDB71() error {
log.Debug().Int("endpoint_id", int(s.EndpointID)).Msg("removing snapshot") 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 { if err != nil {
return err return err
} }

View file

@ -22,7 +22,7 @@ func (m *Migrator) migrateDBVersionToDB90() error {
func (m *Migrator) updateEdgeStackStatusForDB90() error { func (m *Migrator) updateEdgeStackStatusForDB90() error {
log.Info().Msg("clean up deleted endpoints from edge jobs") log.Info().Msg("clean up deleted endpoints from edge jobs")
edgeJobs, err := m.edgeJobService.EdgeJobs() edgeJobs, err := m.edgeJobService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -33,7 +33,7 @@ func (m *Migrator) updateEdgeStackStatusForDB90() error {
if dataservices.IsErrObjectNotFound(err) { if dataservices.IsErrObjectNotFound(err) {
delete(edgeJob.Endpoints, endpointId) delete(edgeJob.Endpoints, endpointId)
err = m.edgeJobService.UpdateEdgeJob(edgeJob.ID, &edgeJob) err = m.edgeJobService.Update(edgeJob.ID, &edgeJob)
if err != nil { if err != nil {
return err return err
} }
@ -47,7 +47,7 @@ func (m *Migrator) updateEdgeStackStatusForDB90() error {
func (m *Migrator) updateUserThemeForDB90() error { func (m *Migrator) updateUserThemeForDB90() error {
log.Info().Msg("updating existing user theme settings") log.Info().Msg("updating existing user theme settings")
users, err := m.userService.Users() users, err := m.userService.ReadAll()
if err != nil { if err != nil {
return err return err
} }
@ -58,7 +58,7 @@ func (m *Migrator) updateUserThemeForDB90() error {
user.ThemeSettings.Color = user.UserTheme 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 return err
} }
} }

View file

@ -392,7 +392,7 @@ func (store *Store) Export(filename string) (err error) {
backup := storeExport{} backup := storeExport{}
if c, err := store.CustomTemplate().CustomTemplates(); err != nil { if c, err := store.CustomTemplate().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Custom Templates") log.Error().Err(err).Msg("exporting Custom Templates")
} }
@ -400,7 +400,7 @@ func (store *Store) Export(filename string) (err error) {
backup.CustomTemplate = c backup.CustomTemplate = c
} }
if e, err := store.EdgeGroup().EdgeGroups(); err != nil { if e, err := store.EdgeGroup().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Edge Groups") log.Error().Err(err).Msg("exporting Edge Groups")
} }
@ -408,7 +408,7 @@ func (store *Store) Export(filename string) (err error) {
backup.EdgeGroup = e backup.EdgeGroup = e
} }
if e, err := store.EdgeJob().EdgeJobs(); err != nil { if e, err := store.EdgeJob().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Edge Jobs") log.Error().Err(err).Msg("exporting Edge Jobs")
} }
@ -432,7 +432,7 @@ func (store *Store) Export(filename string) (err error) {
backup.Endpoint = e backup.Endpoint = e
} }
if e, err := store.EndpointGroup().EndpointGroups(); err != nil { if e, err := store.EndpointGroup().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Endpoint Groups") log.Error().Err(err).Msg("exporting Endpoint Groups")
} }
@ -456,7 +456,7 @@ func (store *Store) Export(filename string) (err error) {
backup.Extensions = r backup.Extensions = r
} }
if r, err := store.HelmUserRepository().HelmUserRepositories(); err != nil { if r, err := store.HelmUserRepository().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Helm User Repositories") log.Error().Err(err).Msg("exporting Helm User Repositories")
} }
@ -464,7 +464,7 @@ func (store *Store) Export(filename string) (err error) {
backup.HelmUserRepository = r backup.HelmUserRepository = r
} }
if r, err := store.Registry().Registries(); err != nil { if r, err := store.Registry().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Registries") log.Error().Err(err).Msg("exporting Registries")
} }
@ -472,7 +472,7 @@ func (store *Store) Export(filename string) (err error) {
backup.Registry = r backup.Registry = r
} }
if c, err := store.ResourceControl().ResourceControls(); err != nil { if c, err := store.ResourceControl().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Resource Controls") log.Error().Err(err).Msg("exporting Resource Controls")
} }
@ -480,7 +480,7 @@ func (store *Store) Export(filename string) (err error) {
backup.ResourceControl = c backup.ResourceControl = c
} }
if role, err := store.Role().Roles(); err != nil { if role, err := store.Role().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Roles") log.Error().Err(err).Msg("exporting Roles")
} }
@ -504,7 +504,7 @@ func (store *Store) Export(filename string) (err error) {
backup.Settings = *settings backup.Settings = *settings
} }
if snapshot, err := store.Snapshot().Snapshots(); err != nil { if snapshot, err := store.Snapshot().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Snapshots") log.Error().Err(err).Msg("exporting Snapshots")
} }
@ -520,7 +520,7 @@ func (store *Store) Export(filename string) (err error) {
backup.SSLSettings = *settings backup.SSLSettings = *settings
} }
if t, err := store.Stack().Stacks(); err != nil { if t, err := store.Stack().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Stacks") log.Error().Err(err).Msg("exporting Stacks")
} }
@ -528,7 +528,7 @@ func (store *Store) Export(filename string) (err error) {
backup.Stack = t backup.Stack = t
} }
if t, err := store.Tag().Tags(); err != nil { if t, err := store.Tag().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Tags") log.Error().Err(err).Msg("exporting Tags")
} }
@ -536,7 +536,7 @@ func (store *Store) Export(filename string) (err error) {
backup.Tag = t backup.Tag = t
} }
if t, err := store.TeamMembership().TeamMemberships(); err != nil { if t, err := store.TeamMembership().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Team Memberships") log.Error().Err(err).Msg("exporting Team Memberships")
} }
@ -544,7 +544,7 @@ func (store *Store) Export(filename string) (err error) {
backup.TeamMembership = t backup.TeamMembership = t
} }
if t, err := store.Team().Teams(); err != nil { if t, err := store.Team().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Teams") log.Error().Err(err).Msg("exporting Teams")
} }
@ -560,7 +560,7 @@ func (store *Store) Export(filename string) (err error) {
backup.TunnelServer = *info backup.TunnelServer = *info
} }
if users, err := store.User().Users(); err != nil { if users, err := store.User().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Users") log.Error().Err(err).Msg("exporting Users")
} }
@ -568,7 +568,7 @@ func (store *Store) Export(filename string) (err error) {
backup.User = users backup.User = users
} }
if webhooks, err := store.Webhook().Webhooks(); err != nil { if webhooks, err := store.Webhook().ReadAll(); err != nil {
if !store.IsErrObjectNotFound(err) { if !store.IsErrObjectNotFound(err) {
log.Error().Err(err).Msg("exporting Webhooks") log.Error().Err(err).Msg("exporting Webhooks")
} }
@ -611,15 +611,15 @@ func (store *Store) Import(filename string) (err error) {
store.Version().UpdateVersion(&backup.Version) store.Version().UpdateVersion(&backup.Version)
for _, v := range backup.CustomTemplate { for _, v := range backup.CustomTemplate {
store.CustomTemplate().UpdateCustomTemplate(v.ID, &v) store.CustomTemplate().Update(v.ID, &v)
} }
for _, v := range backup.EdgeGroup { for _, v := range backup.EdgeGroup {
store.EdgeGroup().UpdateEdgeGroup(v.ID, &v) store.EdgeGroup().Update(v.ID, &v)
} }
for _, v := range backup.EdgeJob { for _, v := range backup.EdgeJob {
store.EdgeJob().UpdateEdgeJob(v.ID, &v) store.EdgeJob().Update(v.ID, &v)
} }
for _, v := range backup.EdgeStack { for _, v := range backup.EdgeStack {
@ -631,7 +631,7 @@ func (store *Store) Import(filename string) (err error) {
} }
for _, v := range backup.EndpointGroup { for _, v := range backup.EndpointGroup {
store.EndpointGroup().UpdateEndpointGroup(v.ID, &v) store.EndpointGroup().Update(v.ID, &v)
} }
for _, v := range backup.EndpointRelation { for _, v := range backup.EndpointRelation {
@ -639,54 +639,54 @@ func (store *Store) Import(filename string) (err error) {
} }
for _, v := range backup.HelmUserRepository { for _, v := range backup.HelmUserRepository {
store.HelmUserRepository().UpdateHelmUserRepository(v.ID, &v) store.HelmUserRepository().Update(v.ID, &v)
} }
for _, v := range backup.Registry { for _, v := range backup.Registry {
store.Registry().UpdateRegistry(v.ID, &v) store.Registry().Update(v.ID, &v)
} }
for _, v := range backup.ResourceControl { for _, v := range backup.ResourceControl {
store.ResourceControl().UpdateResourceControl(v.ID, &v) store.ResourceControl().Update(v.ID, &v)
} }
for _, v := range backup.Role { for _, v := range backup.Role {
store.Role().UpdateRole(v.ID, &v) store.Role().Update(v.ID, &v)
} }
store.Settings().UpdateSettings(&backup.Settings) store.Settings().UpdateSettings(&backup.Settings)
store.SSLSettings().UpdateSettings(&backup.SSLSettings) store.SSLSettings().UpdateSettings(&backup.SSLSettings)
for _, v := range backup.Snapshot { for _, v := range backup.Snapshot {
store.Snapshot().UpdateSnapshot(&v) store.Snapshot().Update(v.EndpointID, &v)
} }
for _, v := range backup.Stack { for _, v := range backup.Stack {
store.Stack().UpdateStack(v.ID, &v) store.Stack().Update(v.ID, &v)
} }
for _, v := range backup.Tag { for _, v := range backup.Tag {
store.Tag().UpdateTag(v.ID, &v) store.Tag().Update(v.ID, &v)
} }
for _, v := range backup.TeamMembership { for _, v := range backup.TeamMembership {
store.TeamMembership().UpdateTeamMembership(v.ID, &v) store.TeamMembership().Update(v.ID, &v)
} }
for _, v := range backup.Team { for _, v := range backup.Team {
store.Team().UpdateTeam(v.ID, &v) store.Team().Update(v.ID, &v)
} }
store.TunnelServer().UpdateInfo(&backup.TunnelServer) store.TunnelServer().UpdateInfo(&backup.TunnelServer)
for _, user := range backup.User { 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") log.Debug().Str("user", fmt.Sprintf("%+v", user)).Err(err).Msg("failed to update the user in the database")
} }
} }
for _, v := range backup.Webhook { for _, v := range backup.Webhook {
store.Webhook().UpdateWebhook(v.ID, &v) store.Webhook().Update(v.ID, &v)
} }
return store.connection.RestoreMetadata(backup.Metadata) return store.connection.RestoreMetadata(backup.Metadata)

View file

@ -73,7 +73,7 @@ func isCleanStore(store dataservices.DataStore) (bool, error) {
return false, nil return false, nil
} }
users, err := store.User().Users() users, err := store.User().ReadAll()
if err != nil { if err != nil {
return false, err return false, err
} }

View file

@ -26,7 +26,7 @@ func NewRegistryClient(dataStore dataservices.DataStore) *RegistryClient {
} }
func (c *RegistryClient) RegistryAuth(image Image) (string, string, error) { func (c *RegistryClient) RegistryAuth(image Image) (string, string, error) {
registries, err := c.dataStore.Registry().Registries() registries, err := c.dataStore.Registry().ReadAll()
if err != nil { if err != nil {
return "", "", err return "", "", err
} }
@ -57,7 +57,7 @@ func (c *RegistryClient) CertainRegistryAuth(registry *portainer.Registry) (stri
} }
func (c *RegistryClient) EncodedRegistryAuth(image Image) (string, error) { func (c *RegistryClient) EncodedRegistryAuth(image Image) (string, error) {
registries, err := c.dataStore.Registry().Registries() registries, err := c.dataStore.Registry().ReadAll()
if err != nil { if err != nil {
return "", err return "", err
} }

View file

@ -56,7 +56,7 @@ func (deployer *KubernetesDeployer) getToken(userID portainer.UserID, endpoint *
return "", err return "", err
} }
user, err := deployer.dataStore.User().User(userID) user, err := deployer.dataStore.User().Read(userID)
if err != nil { if err != nil {
return "", errors.Wrap(err, "failed to fetch the user") return "", errors.Wrap(err, "failed to fetch the user")
} }

View file

@ -156,7 +156,7 @@ func (handler *Handler) syncUserTeamsWithLDAPGroups(user *portainer.User, settin
return nil return nil
} }
teams, err := handler.DataStore.Team().Teams() teams, err := handler.DataStore.Team().ReadAll()
if err != nil { if err != nil {
return err return err
} }

View file

@ -39,7 +39,7 @@ func (handler *Handler) customTemplateCreate(w http.ResponseWriter, r *http.Requ
customTemplate.CreatedByUserID = tokenData.ID customTemplate.CreatedByUserID = tokenData.ID
customTemplates, err := handler.DataStore.CustomTemplate().CustomTemplates() customTemplates, err := handler.DataStore.CustomTemplate().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve custom templates from the database", err) return httperror.InternalServerError("Unable to retrieve custom templates from the database", err)
} }

View file

@ -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) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err)
} else if err != nil { } 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) 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 { if err != nil {
return httperror.InternalServerError("Unable to remove the custom template from the database", err) 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 { if resourceControl != nil {
err = handler.DataStore.ResourceControl().DeleteResourceControl(resourceControl.ID) err = handler.DataStore.ResourceControl().Delete(resourceControl.ID)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to remove the associated resource control from the database", err) return httperror.InternalServerError("Unable to remove the associated resource control from the database", err)
} }

View file

@ -33,7 +33,7 @@ func (handler *Handler) customTemplateFile(w http.ResponseWriter, r *http.Reques
return httperror.BadRequest("Invalid custom template identifier route variable", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -34,7 +34,7 @@ func (handler *Handler) customTemplateGitFetch(w http.ResponseWriter, r *http.Re
return httperror.BadRequest("Invalid Custom template identifier route variable", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
@ -78,7 +78,7 @@ func (handler *Handler) customTemplateGitFetch(w http.ResponseWriter, r *http.Re
if customTemplate.GitConfig.ConfigHash != commitHash { if customTemplate.GitConfig.ConfigHash != commitHash {
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 { if err != nil {
return httperror.InternalServerError("Unable to persist custom template changes inside the database", err) return httperror.InternalServerError("Unable to persist custom template changes inside the database", err)
} }

View file

@ -32,7 +32,7 @@ func (handler *Handler) customTemplateInspect(w http.ResponseWriter, r *http.Req
return httperror.BadRequest("Invalid Custom template identifier route variable", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -30,12 +30,12 @@ func (handler *Handler) customTemplateList(w http.ResponseWriter, r *http.Reques
return httperror.BadRequest("Invalid Custom template type", err) return httperror.BadRequest("Invalid Custom template type", err)
} }
customTemplates, err := handler.DataStore.CustomTemplate().CustomTemplates() customTemplates, err := handler.DataStore.CustomTemplate().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve custom templates from the database", err) 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve resource controls from the database", err) 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 { if !securityContext.IsAdmin {
user, err := handler.DataStore.User().User(securityContext.UserID) user, err := handler.DataStore.User().Read(securityContext.UserID)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve user information from the database", err) return httperror.InternalServerError("Unable to retrieve user information from the database", err)
} }

View file

@ -125,7 +125,7 @@ func (handler *Handler) customTemplateUpdate(w http.ResponseWriter, r *http.Requ
return httperror.BadRequest("Invalid request payload", err) return httperror.BadRequest("Invalid request payload", err)
} }
customTemplates, err := handler.DataStore.CustomTemplate().CustomTemplates() customTemplates, err := handler.DataStore.CustomTemplate().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve custom templates from the database", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a custom template with the specified identifier inside the database", err)
} else if err != nil { } 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 { if err != nil {
return httperror.InternalServerError("Unable to persist custom template changes inside the database", err) return httperror.InternalServerError("Unable to persist custom template changes inside the database", err)
} }

View file

@ -64,7 +64,7 @@ func (handler *Handler) recreate(w http.ResponseWriter, r *http.Request) *httper
} }
func (handler *Handler) createResourceControl(oldContainerId string, newContainerId string) { func (handler *Handler) createResourceControl(oldContainerId string, newContainerId string) {
resourceControls, err := handler.dataStore.ResourceControl().ResourceControls() resourceControls, err := handler.dataStore.ResourceControl().ReadAll()
if err != nil { if err != nil {
log.Error().Err(err).Msg("Exporting Resource Controls") log.Error().Err(err).Msg("Exporting Resource Controls")
return return
@ -90,7 +90,7 @@ func (handler *Handler) updateWebhook(oldContainerId string, newContainerId stri
} }
webhook.ResourceID = newContainerId webhook.ResourceID = newContainerId
err = handler.dataStore.Webhook().UpdateWebhook(webhook.ID, webhook) err = handler.dataStore.Webhook().Update(webhook.ID, webhook)
if err != nil { if err != nil {
log.Error().Err(err).Int("webhookId", int(webhook.ID)).Msg("cannot update webhook") log.Error().Err(err).Int("webhookId", int(webhook.ID)).Msg("cannot update webhook")
} }

View file

@ -21,7 +21,7 @@ func GetEndpointsByTags(tx dataservices.DataStoreTx, tagIDs []portainer.TagID, p
tags := []portainer.Tag{} tags := []portainer.Tag{}
for _, tagID := range tagIDs { for _, tagID := range tagIDs {
tag, err := tx.Tag().Tag(tagID) tag, err := tx.Tag().Read(tagID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -55,7 +55,7 @@ func (handler *Handler) edgeGroupCreate(w http.ResponseWriter, r *http.Request)
var edgeGroup *portainer.EdgeGroup var edgeGroup *portainer.EdgeGroup
err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error { err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error {
edgeGroups, err := tx.EdgeGroup().EdgeGroups() edgeGroups, err := tx.EdgeGroup().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve Edge groups from the database", err) return httperror.InternalServerError("Unable to retrieve Edge groups from the database", err)
} }

View file

@ -50,7 +50,7 @@ func (handler *Handler) edgeGroupDelete(w http.ResponseWriter, r *http.Request)
} }
func deleteEdgeGroup(tx dataservices.DataStoreTx, ID portainer.EdgeGroupID) error { func deleteEdgeGroup(tx dataservices.DataStoreTx, ID portainer.EdgeGroupID) error {
_, err := tx.EdgeGroup().EdgeGroup(ID) _, err := tx.EdgeGroup().Read(ID)
if tx.IsErrObjectNotFound(err) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err)
} else if err != nil { } 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err) 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 { if err != nil {
return httperror.InternalServerError("Unable to remove the Edge group from the database", err) return httperror.InternalServerError("Unable to remove the Edge group from the database", err)
} }

View file

@ -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) { 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) { if tx.IsErrObjectNotFound(err) {
return nil, httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err) return nil, httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -46,7 +46,7 @@ func (handler *Handler) edgeGroupList(w http.ResponseWriter, r *http.Request) *h
} }
func getEdgeGroupList(tx dataservices.DataStoreTx) ([]decoratedEdgeGroup, error) { func getEdgeGroupList(tx dataservices.DataStoreTx) ([]decoratedEdgeGroup, error) {
edgeGroups, err := tx.EdgeGroup().EdgeGroups() edgeGroups, err := tx.EdgeGroup().ReadAll()
if err != nil { if err != nil {
return nil, httperror.InternalServerError("Unable to retrieve Edge groups from the database", err) 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 { if err != nil {
return nil, httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err) return nil, httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err)
} }

View file

@ -63,7 +63,7 @@ func (handler *Handler) edgeGroupUpdate(w http.ResponseWriter, r *http.Request)
var edgeGroup *portainer.EdgeGroup var edgeGroup *portainer.EdgeGroup
err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error { 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an Edge group with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
@ -71,7 +71,7 @@ func (handler *Handler) edgeGroupUpdate(w http.ResponseWriter, r *http.Request)
} }
if payload.Name != "" { if payload.Name != "" {
edgeGroups, err := tx.EdgeGroup().EdgeGroups() edgeGroups, err := tx.EdgeGroup().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve Edge groups from the database", err) 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) return httperror.InternalServerError("Unable to retrieve environments from database", err)
} }
endpointGroups, err := tx.EndpointGroup().EndpointGroups() endpointGroups, err := tx.EndpointGroup().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve environment groups from database", err) 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 edgeGroup.PartialMatch = *payload.PartialMatch
} }
err = tx.EdgeGroup().UpdateEdgeGroup(edgeGroup.ID, edgeGroup) err = tx.EdgeGroup().Update(edgeGroup.ID, edgeGroup)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to persist Edge group changes inside the database", err) 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) newRelatedEndpoints := edge.EdgeGroupRelatedEndpoints(edgeGroup, endpoints, endpointGroups)
endpointsToUpdate := append(newRelatedEndpoints, oldRelatedEndpoints...) endpointsToUpdate := append(newRelatedEndpoints, oldRelatedEndpoints...)
edgeJobs, err := tx.EdgeJob().EdgeJobs() edgeJobs, err := tx.EdgeJob().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to fetch Edge jobs", err) return httperror.InternalServerError("Unable to fetch Edge jobs", err)
} }
@ -179,12 +179,12 @@ func (handler *Handler) updateEndpointStacks(tx dataservices.DataStoreTx, endpoi
return err return err
} }
endpointGroup, err := tx.EndpointGroup().EndpointGroup(endpoint.GroupID) endpointGroup, err := tx.EndpointGroup().Read(endpoint.GroupID)
if err != nil { if err != nil {
return err return err
} }
edgeGroups, err := tx.EdgeGroup().EdgeGroups() edgeGroups, err := tx.EdgeGroup().ReadAll()
if err != nil { if err != nil {
return err return err
} }

View file

@ -285,5 +285,5 @@ func (handler *Handler) addAndPersistEdgeJob(tx dataservices.DataStoreTx, edgeJo
handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob) handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob)
} }
return tx.EdgeJob().Create(edgeJob.ID, edgeJob) return tx.EdgeJob().CreateWithID(edgeJob.ID, edgeJob)
} }

View file

@ -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 { 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) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
@ -87,7 +87,7 @@ func (handler *Handler) deleteEdgeJob(tx dataservices.DataStoreTx, edgeJobID por
handler.ReverseTunnelService.RemoveEdgeJobFromEndpoint(endpointID, edgeJob.ID) handler.ReverseTunnelService.RemoveEdgeJobFromEndpoint(endpointID, edgeJob.ID)
} }
err = tx.EdgeJob().DeleteEdgeJob(edgeJob.ID) err = tx.EdgeJob().Delete(edgeJob.ID)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to remove the Edge job from the database", err) return httperror.InternalServerError("Unable to remove the Edge job from the database", err)
} }

View file

@ -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) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -33,7 +33,7 @@ func (handler *Handler) edgeJobInspect(w http.ResponseWriter, r *http.Request) *
return httperror.BadRequest("Invalid Edge job identifier route variable", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -21,7 +21,7 @@ import (
// @router /edge_jobs [get] // @router /edge_jobs [get]
// GET request on /api/edge_jobs // GET request on /api/edge_jobs
func (handler *Handler) edgeJobList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err) return httperror.InternalServerError("Unable to retrieve Edge jobs from the database", err)
} }

View file

@ -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 { updateEdgeJobFn := func(edgeJob *portainer.EdgeJob, endpointID portainer.EndpointID, endpointsFromGroups []portainer.EndpointID) error {
mutationFn(edgeJob, endpointID, endpointsFromGroups) 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) 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 { 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) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -39,7 +39,7 @@ func (handler *Handler) edgeJobTasksCollect(w http.ResponseWriter, r *http.Reque
} }
err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error { 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) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
@ -64,7 +64,7 @@ func (handler *Handler) edgeJobTasksCollect(w http.ResponseWriter, r *http.Reque
edgeJob.Endpoints[endpointID] = meta edgeJob.Endpoints[endpointID] = meta
} }
err = tx.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob) err = tx.EdgeJob().Update(edgeJob.ID, edgeJob)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to persist Edge job changes in the database", err) return httperror.InternalServerError("Unable to persist Edge job changes in the database", err)
} }

View file

@ -52,7 +52,7 @@ func (handler *Handler) edgeJobTasksList(w http.ResponseWriter, r *http.Request)
} }
func listEdgeJobTasks(tx dataservices.DataStoreTx, edgeJobID portainer.EdgeJobID) ([]taskContainer, error) { 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) { if tx.IsErrObjectNotFound(err) {
return nil, httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) return nil, httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -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) { 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) { if tx.IsErrObjectNotFound(err) {
return nil, httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err) return nil, httperror.NotFound("Unable to find an Edge job with the specified identifier inside the database", err)
} else if err != nil { } 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) 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 { if err != nil {
return nil, httperror.InternalServerError("Unable to persist Edge job changes inside the database", err) 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 { if len(payload.EdgeGroups) > 0 {
for _, edgeGroupID := range payload.EdgeGroups { for _, edgeGroupID := range payload.EdgeGroups {
_, err := tx.EdgeGroup().EdgeGroup(edgeGroupID) _, err := tx.EdgeGroup().Read(edgeGroupID)
if err != nil { if err != nil {
return err return err
} }

View file

@ -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) 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) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an edge job with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an edge job with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
@ -103,7 +103,7 @@ func (handler *Handler) getEdgeJobLobs(tx dataservices.DataStoreTx, endpointID p
edgeJob.Endpoints[endpoint.ID] = meta edgeJob.Endpoints[endpoint.ID] = meta
} }
err = tx.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob) err = tx.EdgeJob().Update(edgeJob.ID, edgeJob)
handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob) handler.ReverseTunnelService.AddEdgeJob(endpoint, edgeJob)

View file

@ -133,14 +133,14 @@ func (handler *Handler) createEndpointGroup(tx dataservices.DataStoreTx, payload
continue continue
} }
tag, err := tx.Tag().Tag(tagID) tag, err := tx.Tag().Read(tagID)
if err != nil { if err != nil {
return nil, httperror.InternalServerError("Unable to find a tag inside the database", err) return nil, httperror.InternalServerError("Unable to find a tag inside the database", err)
} }
tag.EndpointGroups[endpointGroup.ID] = true tag.EndpointGroups[endpointGroup.ID] = true
err = tx.Tag().UpdateTag(tagID, tag) err = tx.Tag().Update(tagID, tag)
if err != nil { if err != nil {
return nil, httperror.InternalServerError("Unable to persist tag changes inside the database", err) return nil, httperror.InternalServerError("Unable to persist tag changes inside the database", err)
} }

View file

@ -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 { 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) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
return httperror.InternalServerError("Unable to find an environment group with the specified identifier inside the database", err) 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 { if err != nil {
return httperror.InternalServerError("Unable to remove the environment group from the database", err) 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 continue
} }
tag, err := tx.Tag().Tag(tagID) tag, err := tx.Tag().Read(tagID)
if tx.IsErrObjectNotFound(err) { if tx.IsErrObjectNotFound(err) {
return httperror.InternalServerError("Unable to find a tag inside the database", err) return httperror.InternalServerError("Unable to find a tag inside the database", err)
} }
delete(tag.EndpointGroups, endpointGroup.ID) delete(tag.EndpointGroups, endpointGroup.ID)
err = tx.Tag().UpdateTag(tagID, tag) err = tx.Tag().Update(tagID, tag)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to persist tag changes inside the database", err) return httperror.InternalServerError("Unable to persist tag changes inside the database", err)
} }

View file

@ -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 { 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) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -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 { 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) { if tx.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -29,7 +29,7 @@ func (handler *Handler) endpointGroupInspect(w http.ResponseWriter, r *http.Requ
return httperror.BadRequest("Invalid environment group identifier route variable", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -22,7 +22,7 @@ import (
// @failure 500 "Server error" // @failure 500 "Server error"
// @router /endpoint_groups [get] // @router /endpoint_groups [get]
func (handler *Handler) endpointGroupList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) return httperror.InternalServerError("Unable to retrieve environment groups from the database", err)
} }

View file

@ -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) { 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) { if tx.IsErrObjectNotFound(err) {
return nil, httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err) return nil, httperror.NotFound("Unable to find an environment group with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
@ -121,14 +121,14 @@ func (handler *Handler) updateEndpointGroup(tx dataservices.DataStoreTx, endpoin
continue continue
} }
tag, err := tx.Tag().Tag(tagID) tag, err := tx.Tag().Read(tagID)
if err != nil { if err != nil {
return nil, httperror.InternalServerError("Unable to find a tag inside the database", err) return nil, httperror.InternalServerError("Unable to find a tag inside the database", err)
} }
delete(tag.EndpointGroups, endpointGroup.ID) delete(tag.EndpointGroups, endpointGroup.ID)
err = tx.Tag().UpdateTag(tagID, tag) err = tx.Tag().Update(tagID, tag)
if err != nil { if err != nil {
return nil, httperror.InternalServerError("Unable to persist tag changes inside the database", err) 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 continue
} }
tag, err := tx.Tag().Tag(tagID) tag, err := tx.Tag().Read(tagID)
if err != nil { if err != nil {
return nil, httperror.InternalServerError("Unable to find a tag inside the database", err) return nil, httperror.InternalServerError("Unable to find a tag inside the database", err)
} }
tag.EndpointGroups[endpointGroup.ID] = true tag.EndpointGroups[endpointGroup.ID] = true
err = tx.Tag().UpdateTag(tagID, tag) err = tx.Tag().Update(tagID, tag)
if err != nil { if err != nil {
return nil, httperror.InternalServerError("Unable to persist tag changes inside the database", err) 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 { if err != nil {
return nil, httperror.InternalServerError("Unable to persist environment group changes inside the database", err) return nil, httperror.InternalServerError("Unable to persist environment group changes inside the database", err)
} }

View file

@ -12,7 +12,7 @@ func (handler *Handler) updateEndpointRelations(tx dataservices.DataStoreTx, end
} }
if endpointGroup == nil { if endpointGroup == nil {
unassignedGroup, err := tx.EndpointGroup().EndpointGroup(portainer.EndpointGroupID(1)) unassignedGroup, err := tx.EndpointGroup().Read(portainer.EndpointGroupID(1))
if err != nil { if err != nil {
return err return err
} }
@ -25,7 +25,7 @@ func (handler *Handler) updateEndpointRelations(tx dataservices.DataStoreTx, end
return err return err
} }
edgeGroups, err := tx.EdgeGroup().EdgeGroups() edgeGroups, err := tx.EdgeGroup().ReadAll()
if err != nil { if err != nil {
return err return err
} }

View file

@ -22,7 +22,7 @@ import (
// @router /endpoints/agent_versions [get] // @router /endpoints/agent_versions [get]
func (handler *Handler) agentVersions(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) return httperror.InternalServerError("Unable to retrieve environment groups from the database", err)
} }

View file

@ -222,12 +222,12 @@ func (handler *Handler) endpointCreate(w http.ResponseWriter, r *http.Request) *
return endpointCreationError return endpointCreationError
} }
endpointGroup, err := handler.DataStore.EndpointGroup().EndpointGroup(endpoint.GroupID) endpointGroup, err := handler.DataStore.EndpointGroup().Read(endpoint.GroupID)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to find an environment group inside the database", err) 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve edge groups from the database", err) return httperror.InternalServerError("Unable to retrieve edge groups from the database", err)
} }

View file

@ -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 { if err != nil {
return httperror.InternalServerError("Unable to remove the snapshot from the database", err) 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve edge groups from the database", err) 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve registries from the database", err) 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 := &registries[idx] registry := &registries[idx]
if _, ok := registry.RegistryAccesses[endpoint.ID]; ok { if _, ok := registry.RegistryAccesses[endpoint.ID]; ok {
delete(registry.RegistryAccesses, endpoint.ID) delete(registry.RegistryAccesses, endpoint.ID)
err = handler.DataStore.Registry().UpdateRegistry(registry.ID, registry) err = handler.DataStore.Registry().Update(registry.ID, registry)
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to update registry accesses", err) 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) return response.Empty(w)
} }
edgeJobs, err := handler.DataStore.EdgeJob().EdgeJobs() edgeJobs, err := handler.DataStore.EdgeJob().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve edge jobs from the database", err) return httperror.InternalServerError("Unable to retrieve edge jobs from the database", err)
} }

View file

@ -75,7 +75,7 @@ func TestEndpointDeleteEdgeGroupsConcurrently(t *testing.T) {
// Check that the edge group is consistent // Check that the edge group is consistent
edgeGroup, err := handler.DataStore.EdgeGroup().EdgeGroup(1) edgeGroup, err := handler.DataStore.EdgeGroup().Read(1)
if err != nil { if err != nil {
t.Fatal("could not retrieve the edge group:", err) t.Fatal("could not retrieve the edge group:", err)
} }

View file

@ -67,7 +67,7 @@ func (handler *Handler) endpointDockerhubStatus(w http.ResponseWriter, r *http.R
if registryID == 0 { if registryID == 0 {
registry = &portainer.Registry{} registry = &portainer.Registry{}
} else { } else {
registry, err = handler.DataStore.Registry().Registry(portainer.RegistryID(registryID)) registry, err = handler.DataStore.Registry().Read(portainer.RegistryID(registryID))
if handler.DataStore.IsErrObjectNotFound(err) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a registry with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a registry with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -61,7 +61,7 @@ func (handler *Handler) endpointList(w http.ResponseWriter, r *http.Request) *ht
sortField, _ := request.RetrieveQueryParameter(r, "sort", true) sortField, _ := request.RetrieveQueryParameter(r, "sort", true)
sortOrder, _ := request.RetrieveQueryParameter(r, "order", true) sortOrder, _ := request.RetrieveQueryParameter(r, "order", true)
endpointGroups, err := handler.DataStore.EndpointGroup().EndpointGroups() endpointGroups, err := handler.DataStore.EndpointGroup().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve environment groups from the database", err) return httperror.InternalServerError("Unable to retrieve environment groups from the database", err)
} }

View file

@ -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) 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve user from the database", err) 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 isAdmin := securityContext.IsAdmin
registries, err := handler.DataStore.Registry().Registries() registries, err := handler.DataStore.Registry().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Unable to retrieve registries from the database", err) return httperror.InternalServerError("Unable to retrieve registries from the database", err)
} }

View file

@ -69,7 +69,7 @@ func (handler *Handler) endpointRegistryAccess(w http.ResponseWriter, r *http.Re
return httperror.Forbidden("User is not authorized", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find an environment with the specified identifier inside the database", err) return httperror.NotFound("Unable to find an environment with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {
@ -106,7 +106,7 @@ func (handler *Handler) endpointRegistryAccess(w http.ResponseWriter, r *http.Re
registry.RegistryAccesses[portainer.EndpointID(endpointID)] = registryAccess registry.RegistryAccesses[portainer.EndpointID(endpointID)] = registryAccess
handler.DataStore.Registry().UpdateRegistry(registry.ID, registry) handler.DataStore.Registry().Update(registry.ID, registry)
return response.Empty(w) return response.Empty(w)
} }

View file

@ -176,7 +176,7 @@ func (handler *Handler) filterEndpointsByQuery(filteredEndpoints []portainer.End
} }
if query.search != "" { if query.search != "" {
tags, err := handler.DataStore.Tag().Tags() tags, err := handler.DataStore.Tag().ReadAll()
if err != nil { if err != nil {
return nil, 0, errors.WithMessage(err, "Unable to retrieve tags from the database") 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) envIds := make([]portainer.EndpointID, 0)
for _, edgeGroupdId := range stack.EdgeGroups { for _, edgeGroupdId := range stack.EdgeGroups {
edgeGroup, err := datastore.EdgeGroup().EdgeGroup(edgeGroupdId) edgeGroup, err := datastore.EdgeGroup().Read(edgeGroupdId)
if err != nil { if err != nil {
return nil, errors.WithMessage(err, "Unable to retrieve edge group from the database") return nil, errors.WithMessage(err, "Unable to retrieve edge group from the database")
} }

View file

@ -20,12 +20,12 @@ func (handler *Handler) updateEdgeRelations(tx dataservices.DataStoreTx, endpoin
return errors.WithMessage(err, "Unable to find environment relation inside the database") 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 { if err != nil {
return errors.WithMessage(err, "Unable to find environment group inside the database") 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 { if err != nil {
return errors.WithMessage(err, "Unable to retrieve edge groups from the database") return errors.WithMessage(err, "Unable to retrieve edge groups from the database")
} }

View file

@ -9,7 +9,7 @@ import (
) )
func updateEnvironmentEdgeGroups(tx dataservices.DataStoreTx, newEdgeGroups []portainer.EdgeGroupID, environmentID portainer.EndpointID) (bool, error) { 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 { if err != nil {
return false, errors.WithMessage(err, "Unable to retrieve edge groups from the database") 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 { updateSet := func(groupIDs set.Set[portainer.EdgeGroupID], updateItem func(*portainer.EdgeGroup)) error {
for groupID := range groupIDs { for groupID := range groupIDs {
group, err := tx.EdgeGroup().EdgeGroup(groupID) group, err := tx.EdgeGroup().Read(groupID)
if err != nil { if err != nil {
return errors.WithMessage(err, "Unable to find a Edge group inside the database") return errors.WithMessage(err, "Unable to find a Edge group inside the database")
} }
updateItem(group) updateItem(group)
err = tx.EdgeGroup().UpdateEdgeGroup(groupID, group) err = tx.EdgeGroup().Update(groupID, group)
if err != nil { if err != nil {
return errors.WithMessage(err, "Unable to persist Edge group changes inside the database") return errors.WithMessage(err, "Unable to persist Edge group changes inside the database")
} }

View file

@ -34,7 +34,7 @@ func Test_updateEdgeGroups(t *testing.T) {
checkGroups := func(store *datastore.Store, is *assert.Assertions, groupIDs []portainer.EdgeGroupID, endpointID portainer.EndpointID) { checkGroups := func(store *datastore.Store, is *assert.Assertions, groupIDs []portainer.EdgeGroupID, endpointID portainer.EndpointID) {
for _, groupID := range groupIDs { for _, groupID := range groupIDs {
group, err := store.EdgeGroup().EdgeGroup(groupID) group, err := store.EdgeGroup().Read(groupID)
is.NoError(err) is.NoError(err)
for _, endpoint := range group.Endpoints { for _, endpoint := range group.Endpoints {
@ -83,7 +83,7 @@ func Test_updateEdgeGroups(t *testing.T) {
for _, group := range endpointGroups { for _, group := range endpointGroups {
group.Endpoints = append(group.Endpoints, testCase.endpoint.ID) 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) is.NoError(err)
} }

View file

@ -20,14 +20,14 @@ func updateEnvironmentTags(tx dataservices.DataStoreTx, newTags []portainer.TagI
updateSet := func(tagIDs set.Set[portainer.TagID], updateItem func(*portainer.Tag)) error { updateSet := func(tagIDs set.Set[portainer.TagID], updateItem func(*portainer.Tag)) error {
for tagID := range tagIDs { for tagID := range tagIDs {
tag, err := tx.Tag().Tag(tagID) tag, err := tx.Tag().Read(tagID)
if err != nil { if err != nil {
return errors.WithMessage(err, "Unable to find a tag inside the database") return errors.WithMessage(err, "Unable to find a tag inside the database")
} }
updateItem(tag) updateItem(tag)
err = tx.Tag().UpdateTag(tagID, tag) err = tx.Tag().Update(tagID, tag)
if err != nil { if err != nil {
return errors.WithMessage(err, "Unable to persist tag changes inside the database") return errors.WithMessage(err, "Unable to persist tag changes inside the database")
} }

View file

@ -33,7 +33,7 @@ func Test_updateTags(t *testing.T) {
checkTags := func(store *datastore.Store, is *assert.Assertions, tagIDs []portainer.TagID, endpointID portainer.EndpointID) { checkTags := func(store *datastore.Store, is *assert.Assertions, tagIDs []portainer.TagID, endpointID portainer.EndpointID) {
for _, tagID := range tagIDs { for _, tagID := range tagIDs {
tag, err := store.Tag().Tag(tagID) tag, err := store.Tag().Read(tagID)
is.NoError(err) is.NoError(err)
_, ok := tag.Endpoints[endpointID] _, ok := tag.Endpoints[endpointID]
@ -87,7 +87,7 @@ func Test_updateTags(t *testing.T) {
for _, tag := range endpointTags { for _, tag := range endpointTags {
tag.Endpoints[testCase.endpoint.ID] = true tag.Endpoints[testCase.endpoint.ID] = true
err = store.Tag().UpdateTag(tag.ID, &tag) err = store.Tag().Update(tag.ID, &tag)
is.NoError(err) is.NoError(err)
} }

View file

@ -151,7 +151,7 @@ func (handler *Handler) applyPortainerLabelsToHelmAppManifest(r *http.Request, i
if err != nil { if err != nil {
return nil, errors.Wrap(err, "unable to retrieve user details from authentication token") 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 { if err != nil {
return nil, errors.Wrap(err, "unable to load user information from the database") return nil, errors.Wrap(err, "unable to load user information from the database")
} }

View file

@ -78,7 +78,7 @@ func (handler *Handler) fdoConfigureDevice(w http.ResponseWriter, r *http.Reques
return httperror.BadRequest("Invalid request payload", err) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a FDO Profile with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a FDO Profile with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -99,7 +99,7 @@ func (handler *Handler) fdoConfigure(w http.ResponseWriter, r *http.Request) *ht
return httperror.BadRequest("Error saving FDO settings", err) return httperror.BadRequest("Error saving FDO settings", err)
} }
profiles, err := handler.DataStore.FDOProfile().FDOProfiles() profiles, err := handler.DataStore.FDOProfile().ReadAll()
if err != nil { if err != nil {
return httperror.InternalServerError("Error saving FDO settings", err) return httperror.InternalServerError("Error saving FDO settings", err)
} }

View file

@ -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")) 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) { if handler.DataStore.IsErrObjectNotFound(err) {
return httperror.NotFound("Unable to find a FDO Profile with the specified identifier inside the database", err) return httperror.NotFound("Unable to find a FDO Profile with the specified identifier inside the database", err)
} else if err != nil { } else if err != nil {

View file

@ -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")) 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 { if err != nil {
return httperror.InternalServerError("Unable to retrieve Profile", err) return httperror.InternalServerError("Unable to retrieve Profile", err)
} }

Some files were not shown because too many files have changed in this diff Show more