mirror of https://github.com/portainer/portainer
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
|
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)
|
||
|
})
|
||
|
}
|