Füge Modelle für Flows, FlowRuns, TaskRuns, WorkPools, WorkQueues, Deployments, Variablen, FlowRunStates, Logs, und Blocks samt zugehöriger Unmarshal-Logik und Zeitfeld-Unterstützung hinzu; ergänze Tests für die FlowRunStates-Service-Methoden.
This commit is contained in:
120
pkg/client/automations.go
Normal file
120
pkg/client/automations.go
Normal file
@@ -0,0 +1,120 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"git.schultes.dev/schultesdev/prefect-go/pkg/models"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// AutomationsService handles operations related to automations.
|
||||
type AutomationsService struct {
|
||||
client *Client
|
||||
}
|
||||
|
||||
// Create creates a new automation.
|
||||
func (s *AutomationsService) Create(ctx context.Context, req *models.AutomationCreate) (*models.Automation, error) {
|
||||
var automation models.Automation
|
||||
if err := s.client.do(ctx, http.MethodPost, "/automations/", req, &automation); err != nil {
|
||||
return nil, fmt.Errorf("failed to create automation: %w", err)
|
||||
}
|
||||
return &automation, nil
|
||||
}
|
||||
|
||||
// Get retrieves an automation by ID.
|
||||
func (s *AutomationsService) Get(ctx context.Context, id uuid.UUID) (*models.Automation, error) {
|
||||
var automation models.Automation
|
||||
path := joinPath("/automations", id.String())
|
||||
if err := s.client.get(ctx, path, &automation); err != nil {
|
||||
return nil, fmt.Errorf("failed to get automation: %w", err)
|
||||
}
|
||||
return &automation, nil
|
||||
}
|
||||
|
||||
// Update fully replaces an automation.
|
||||
func (s *AutomationsService) Update(ctx context.Context, id uuid.UUID, req *models.AutomationUpdate) (*models.Automation, error) {
|
||||
var automation models.Automation
|
||||
path := joinPath("/automations", id.String())
|
||||
if err := s.client.do(ctx, http.MethodPut, path, req, &automation); err != nil {
|
||||
return nil, fmt.Errorf("failed to update automation: %w", err)
|
||||
}
|
||||
return &automation, nil
|
||||
}
|
||||
|
||||
// Patch partially updates an automation.
|
||||
func (s *AutomationsService) Patch(ctx context.Context, id uuid.UUID, req *models.AutomationPartialUpdate) error {
|
||||
path := joinPath("/automations", id.String())
|
||||
if err := s.client.patch(ctx, path, req, nil); err != nil {
|
||||
return fmt.Errorf("failed to patch automation: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete deletes an automation by ID.
|
||||
func (s *AutomationsService) Delete(ctx context.Context, id uuid.UUID) error {
|
||||
path := joinPath("/automations", id.String())
|
||||
if err := s.client.delete(ctx, path); err != nil {
|
||||
return fmt.Errorf("failed to delete automation: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// List retrieves automations with optional filtering.
|
||||
func (s *AutomationsService) List(ctx context.Context, filter *models.AutomationFilter) ([]models.Automation, error) {
|
||||
if filter == nil {
|
||||
filter = &models.AutomationFilter{}
|
||||
}
|
||||
|
||||
var automations []models.Automation
|
||||
if err := s.client.post(ctx, "/automations/filter", filter, &automations); err != nil {
|
||||
return nil, fmt.Errorf("failed to list automations: %w", err)
|
||||
}
|
||||
return automations, nil
|
||||
}
|
||||
|
||||
// Count returns the number of automations matching the filter.
|
||||
func (s *AutomationsService) Count(ctx context.Context, filter *models.AutomationFilter) (int, error) {
|
||||
if filter == nil {
|
||||
filter = &models.AutomationFilter{}
|
||||
}
|
||||
|
||||
var count int
|
||||
if err := s.client.post(ctx, "/automations/count", filter, &count); err != nil {
|
||||
return 0, fmt.Errorf("failed to count automations: %w", err)
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// GetRelatedTo retrieves automations related to a specific resource.
|
||||
func (s *AutomationsService) GetRelatedTo(ctx context.Context, resourceID string) ([]models.Automation, error) {
|
||||
var automations []models.Automation
|
||||
path := joinPath("/automations/related-to", resourceID)
|
||||
if err := s.client.get(ctx, path, &automations); err != nil {
|
||||
return nil, fmt.Errorf("failed to get related automations: %w", err)
|
||||
}
|
||||
return automations, nil
|
||||
}
|
||||
|
||||
// DeleteOwnedBy deletes automations owned by a specific resource.
|
||||
func (s *AutomationsService) DeleteOwnedBy(ctx context.Context, resourceID string) error {
|
||||
path := joinPath("/automations/owned-by", resourceID)
|
||||
if err := s.client.delete(ctx, path); err != nil {
|
||||
return fmt.Errorf("failed to delete owned automations: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidateTemplate validates an automation template.
|
||||
func (s *AutomationsService) ValidateTemplate(ctx context.Context, template string) error {
|
||||
req := struct {
|
||||
Template string `json:"template"`
|
||||
}{
|
||||
Template: template,
|
||||
}
|
||||
if err := s.client.post(ctx, "/automations/templates/validate", req, nil); err != nil {
|
||||
return fmt.Errorf("failed to validate template: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user