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