feat: implement workflows api

This commit is contained in:
2026-06-01 11:36:30 -04:00
parent a41c992260
commit dd77be8ecb
3 changed files with 383 additions and 0 deletions
+135
View File
@@ -0,0 +1,135 @@
package client
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
type Workflow struct {
ID string `json:"id"`
Name string `json:"name"`
Enabled bool `json:"enabled"`
// Triggers, Filters, Actions would be complex nested objects.
// For simplicity in this experimental implementation, we'll use raw maps.
Triggers []map[string]interface{} `json:"triggers"`
Filters []map[string]interface{} `json:"filters"`
Actions []map[string]interface{} `json:"actions"`
}
type CreateWorkflowRequest struct {
Name string `json:"name"`
Enabled bool `json:"enabled"`
Triggers []map[string]interface{} `json:"triggers"`
Filters []map[string]interface{} `json:"filters"`
Actions []map[string]interface{} `json:"actions"`
}
type UpdateWorkflowRequest struct {
Name string `json:"name,omitempty"`
Enabled *bool `json:"enabled,omitempty"`
Triggers []map[string]interface{} `json:"triggers,omitempty"`
Filters []map[string]interface{} `json:"filters,omitempty"`
Actions []map[string]interface{} `json:"actions,omitempty"`
}
func (c *Client) GetWorkflows() ([]Workflow, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/workflow", c.HostURL), nil)
if err != nil {
return nil, err
}
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
var workflows []Workflow
err = json.Unmarshal(body, &workflows)
if err != nil {
return nil, err
}
return workflows, nil
}
func (c *Client) GetWorkflow(id string) (*Workflow, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/workflow/%s", c.HostURL, id), nil)
if err != nil {
return nil, err
}
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
var workflow Workflow
err = json.Unmarshal(body, &workflow)
if err != nil {
return nil, err
}
return &workflow, nil
}
func (c *Client) CreateWorkflow(workflow CreateWorkflowRequest) (*Workflow, error) {
rb, err := json.Marshal(workflow)
if err != nil {
return nil, err
}
req, err := http.NewRequest("POST", fmt.Sprintf("%s/workflow", c.HostURL), bytes.NewBuffer(rb))
if err != nil {
return nil, err
}
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
var newWorkflow Workflow
err = json.Unmarshal(body, &newWorkflow)
if err != nil {
return nil, err
}
return &newWorkflow, nil
}
func (c *Client) UpdateWorkflow(id string, workflow UpdateWorkflowRequest) (*Workflow, error) {
rb, err := json.Marshal(workflow)
if err != nil {
return nil, err
}
req, err := http.NewRequest("PUT", fmt.Sprintf("%s/workflow/%s", c.HostURL, id), bytes.NewBuffer(rb))
if err != nil {
return nil, err
}
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
var updatedWorkflow Workflow
err = json.Unmarshal(body, &updatedWorkflow)
if err != nil {
return nil, err
}
return &updatedWorkflow, nil
}
func (c *Client) DeleteWorkflow(id string) error {
req, err := http.NewRequest("DELETE", fmt.Sprintf("%s/workflow/%s", c.HostURL, id), nil)
if err != nil {
return err
}
_, err = c.doRequest(req)
return err
}