50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package pendingactions
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/dataservices"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type ServiceTx struct {
|
|
dataservices.BaseDataServiceTx[portainer.PendingAction, portainer.PendingActionID]
|
|
}
|
|
|
|
func (s ServiceTx) Create(config *portainer.PendingAction) error {
|
|
return s.Tx.CreateObject(BucketName, func(id uint64) (int, any) {
|
|
config.ID = portainer.PendingActionID(id)
|
|
config.CreatedAt = time.Now().Unix()
|
|
|
|
return int(config.ID), config
|
|
})
|
|
}
|
|
|
|
func (s ServiceTx) Update(ID portainer.PendingActionID, config *portainer.PendingAction) error {
|
|
return s.BaseDataServiceTx.Update(ID, config)
|
|
}
|
|
|
|
func (s ServiceTx) DeleteByEndpointID(ID portainer.EndpointID) error {
|
|
log.Debug().Int("endpointId", int(ID)).Msg("deleting pending actions for endpoint")
|
|
pendingActions, err := s.ReadAll()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to retrieve pending-actions for endpoint (%d): %w", ID, err)
|
|
}
|
|
|
|
for _, pendingAction := range pendingActions {
|
|
if pendingAction.EndpointID == ID {
|
|
if err := s.Delete(pendingAction.ID); err != nil {
|
|
log.Debug().Int("endpointId", int(ID)).Msgf("failed to delete pending action: %v", err)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetNextIdentifier returns the next identifier for a custom template.
|
|
func (service ServiceTx) GetNextIdentifier() int {
|
|
return service.Tx.GetNextIdentifier(BucketName)
|
|
}
|